데이터베이스 개발자 질문과 답변 게시판

데이터베이스 개발/운영 관련 질문과 답변을 올리는 게시판입니다. 궁금하신 내용을 이곳에서 문의하시면 SQLER 분들의 답변을 받으실 수 있습니다. 문의를 하실때에는 최근 작업하신 특이 사항이나, 장애 발생 전 상황을 상세히 올려 주시면 답글을 적어주시는 SQLER분들의 답변이 더 정확할 수 있으니 도움 되시길 바랍니다. 쿼리 문의일 경우, 실제 문제가 재현되는 테이블생성, 샘플데이터 생성 쿼리를 함께 올려 주시면 더 빠르고 정확한 쿼리 문의 응답이 가능합니다.

 

A 테이블

Seq

Team

Divi

Detail

2

광학팀

Delivery

Laser

9

광학팀

Delivery

Chiller

10

광학팀

Delivery

BET

11

광학팀

Delivery

BET Mount

12

광학팀

Delivery

ATT

13

광학팀

Delivery

Wave Plate

14

광학팀

Delivery

POL

15

광학팀

Delivery

Mirror 종류

16

광학팀

Delivery

Mirror Spring

17

광학팀

Head

Shutter 위치

18

광학팀

Head

Power Meter

21

광학팀

Head

LPC

22

광학팀

Head

TC Lens

23

광학팀

Head

Lens Mounting 방법

 

B 테이블

Seq

yyyy

OrderNo

CustNm

1

2018

18A765

UXN  

2

2019

20B001

비에이치  

3

2019

20B002

비에이치  

4

2019

20B003

비에이치  

5

2019

20B004

비에이치  

6

2019

20A141

비에이치  

7

2019

20A142

비에이치  

8

2019

20B010

비에이치  

9

2019

20B011

비에이치  

 

C 테이블 (idx 컬럼 추가 - A테이블 Seq 값)

Seq

idx

Team

Divi

Detail

OrderNo

Result

1

2

광학팀

Delivery

Laser

20B001

1

2

2

광학팀

Delivery

Chiller

20B001

2

3

2

광학팀

Delivery

BET

20B001

3

4

2

광학팀

Delivery

BET Mount

20B001

4

5

2

광학팀

Delivery

ATT

20B001

5

6

2

광학팀

Delivery

Wave Plate

20B001

6

7

2

광학팀

Delivery

POL

20B001

7

8

2

광학팀

Delivery

Mirror 종류

20B001

8

9

2

광학팀

Delivery

Mirror Spring

20B001

9

10

2

광학팀

Head

Shutter 위치

20B001

10

11

2

광학팀

Head

Power Meter

20B001

11

12

2

광학팀

Head

LPC

20B001

12

13

2

광학팀

Head

TC Lens

20B001

13

14

2

광학팀

Head

Lens Mounting 방법

20B001

14

15

2

광학팀

Delivery

Laser

20B004

1

 

여기서 어떤식으로 변경해야 하나요??


Declare @Columns Varchar(max), @SQL Varchar(max), @SQL1 Varchar(max)
Set @Columns = ''

Select @Columns = @Columns + '[' + Convert(varchar(10),Seq) + '],'
    From (
        Select Seq From SPSSCOrderNo
        ) AS ods
Set @Columns = LEFT(@Columns, LEN(@Columns) - 1)
------------


Set @SQL = ''
Set @SQL1 = ''

SET @SQL = '
SELECT CASE Detail WHEN ''OrderNo'' THEN 0 ELSE 1 END seq
     , a.*
  FROM (SELECT Seq
             , CAST(OrderNo AS VARCHAR(6)) OrderNo
             , CAST(CustNm  AS VARCHAR(6)) CustNm
             , '''' Team
             , '''' Divi
          FROM SPSSCTitle
        ) a
 UNPIVOT (v FOR Detail IN (OrderNo, CustNm)) a
 PIVOT (MIN(v) FOR Seq IN (' + @Columns + ')) a
UNION
SELECT *
  FROM (SELECT c.Seq
             , c.Team
             , c.Divi
             , c.Detail
             , c.Result
             , b.Seq AS Seq_b
          FROM SPSSCTitle b
         INNER JOIN SPSSCDetailOrder c
            ON b.OrderNo = c.OrderNo
        ) a
 PIVOT (MIN(Result) FOR Seq_b IN (' + @Columns + ')) a
'
EXEC(@SQL)

 

최종 원한는 화면

      (동적)  
번호 18A765 20B001 20B002 20B003 20B004 20A141 20A142 20B010 20B011 21A001 21A002 21A003 …n
NO                          
Team Divi Detail                          
광학팀 Delivery Laser   1      1                
광학팀 Delivery Chiller   2                      
광학팀 Delivery BET   3                      
광학팀 Delivery BET Mount   4                      
광학팀 Delivery ATT   5                      
광학팀 Delivery Wave Plate   6                      
광학팀 Delivery POL   7                      
광학팀 Delivery Mirror 종류   8                      
광학팀 Delivery Mirror Spring   9                      
광학팀 Head Shutter 위치   10                      
광학팀 Head Power Meter   11                      

 

 

-- MSSQL --

WITH tab_b AS

(

SELECT 1 Seq, '2018' yyyy, '18A765' OrderNo, 'A' CustNm

UNION ALL SELECT  2, '2019', '20B001', 'A'

UNION ALL SELECT  3, '2019', '20B002', 'A'

UNION ALL SELECT  4, '2019', '20B003', 'B'

UNION ALL SELECT  5, '2019', '20B004', 'B'

UNION ALL SELECT  6, '2019', '20A141', 'B'

UNION ALL SELECT  7, '2019', '20A142', 'B'

UNION ALL SELECT  8, '2019', '20B010', 'B'

UNION ALL SELECT  9, '2019', '20B011', 'D'

UNION ALL SELECT 10, '2021', '21A001', 'D'

UNION ALL SELECT 11, '2021', '21A002', 'D'

UNION ALL SELECT 12, '2021', '21A003', 'D'

)

, tab_c AS

(

SELECT 2 Seq, '광학팀' Team, 'Delivery' Divi, 'Laser' Detail, '20B001' OrderNo, null Result

UNION ALL SELECT  9, '광학팀', 'Delivery', 'Chiller'      , '20B001', null

UNION ALL SELECT 10, '광학팀', 'Delivery', 'BET'          , '20B001', 'O'

UNION ALL SELECT 11, '광학팀', 'Delivery', 'BET Mount'    , '20B001', 'O'

UNION ALL SELECT 12, '광학팀', 'Delivery', 'ATT'          , '20B001', 'X'

UNION ALL SELECT 13, '광학팀', 'Delivery', 'Wave Plate'   , '20B001', null

UNION ALL SELECT 14, '광학팀', 'Delivery', 'POL'          , '20B001', null

UNION ALL SELECT 15, '광학팀', 'Delivery', 'Mirror 종류'  , '20B001', null

UNION ALL SELECT 16, '광학팀', 'Delivery', 'Mirror Spring', '20B001', null

UNION ALL SELECT 17, '광학팀', 'Head'    , 'Shutter 위치' , '20B001', null

UNION ALL SELECT 18, '광학팀', 'Head'    , 'Power Meter'  , '20B001', null

UNION ALL SELECT 19, '광학팀', 'Delivery', 'BET'          , '20B004', 'O'

)

SELECT CASE Detail WHEN 'OrderNo' THEN 0 ELSE 1 END seq

     , a.*

  FROM (SELECT Seq

             , CAST(OrderNo AS VARCHAR(6)) OrderNo

             , CAST(CustNm  AS VARCHAR(6)) CustNm

             , '' Team

             , '' Divi

          FROM tab_b

        ) a

 UNPIVOT (v FOR Detail IN (OrderNo, CustNm)) a

 PIVOT (MIN(v) FOR Seq IN ([1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11], [12])) a

 UNION

SELECT *

  FROM (SELECT c.Seq

             , c.Team

             , c.Divi

             , c.Detail

             , c.Result

             , b.Seq Seq_b

          FROM tab_b b

         INNER JOIN tab_c c

            ON b.OrderNo = c.OrderNo

        ) a

 PIVOT (MIN(Result) FOR Seq_b IN ([1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11], [12])) a

;

 

현재이렇게 출력됨

0.jpg

 

원하는 출력형태

2.jpg

No. Subject Author Date Views
10870 MSSQL 쿼리 질문입니다. [1] update 감프 2022.11.26 8
10869 CASE WHEN 쿼리문 질문 드립니다. 열린문서 2022.11.26 7
10868 설비의 데이터를 로컬 DB(설비 PC 내부)에서 관리하는데 문제가 있습니다. [1] 아슈로 2022.11.24 20
10867 varchar(max) 사용시 text 처럼 외부에 저장되었는지 여부? 감프 2022.11.23 9
10866 sql 날짜형식 0이 아닌 조회문 문의드립니다. [1] 인트피트 2022.11.22 18
10865 varchar(max)가 좋을지 varchar(8000) 을 여러게 만드는게 좋을지? [1] 감프 2022.11.22 17
10864 간단한 쿼리 질문드리겠습니다 ! [1] 유충실 2022.11.22 17
10863 초보 질문 드립니다 [1] 빅배 2022.11.17 30
10862 SQL 어느 쿼리가 더 효율적일까요? [2] 감프 2022.11.16 51
10861 DB초보가 질문드려요 ㅠㅠ [1] file 아르4616 2022.11.13 45
10860 초보 쿼리 질문드립니다. [2] phh**** 2022.11.09 50
10859 초보, 쿼리 질문 드립니다. [1] 계자 2022.11.07 41
10858 MSSQL 쿼리 질문 [3] One이 2022.10.24 87
10857 OPENROWSET 실행 중 상태 [1] 나당앙 2022.10.21 42
10856 MSSQL(VER 2014) RTRIM, LTRIM 공백제거 문의 [1] 산소녀 2022.10.18 65
10855 쿼리시 이름이 받침이 있는 경와 없는 경우 구별 [4] m**** 2022.10.13 84
10854 MYSQL 주간반복 일정 카운트 방법문의 [1] 오정석1555 2022.10.12 43
» MSSQL PIVOT 쿼리 질문드립니다. [2] file One이 2022.10.11 49
10852 MSSQL 질문있습니다. [1] 오리0341 2022.10.07 43
10851 조건에 없는 경우 대체 할 수 있는 행 [1] 설마이클 2022.10.04 48





XE Login