MSSQL에서 행열 변환 질문드립니다. 0 5 2,199

by 유선일 [SQLServer] MSSQL [2019.04.03 12:44:10]


환절기에 고생이 많으십니다.

MSSQL 아래와 같이 조회 결과를 변경하고 싶습니다.

어떻게 해야 할까요? PIVOT을 써도 잘 안되고 CASE 문을 써도 잘 안되는데

고수님들의 도움 부탁드립니다.

감사합니다.

변경전

DATE X1 X2
20190109 33.4 33.3
20190109 33.0 33.1
20190111 33.3 33.5
20190111 33.9 34.0
20190113 33.2 33.4
20190113 32.9 33.2
20190119 33.0 33.3
20190119 33.5 33.7
20190120 33.3 33.4
20190120 33.6 33.8

변경후

  20190109 20190111 20190113 20190119 20190120
X1 33.4 33.0 33.3 33.9 33.2 32.9 33.0 33.5 33.3 33.6
X2 33.3 33.1 33.5 34.0 33.4 33.2 33.3 33.7 33.4 33.8
by 마농 [2019.04.03 13:13:07]

날짜별 두건씩 나오는데?
이 두건을 구별할 항목은 없나요?
아니면 정렬기준이라던가?
구별할 필요 없이 아무거나 먼저 나와도 상관 없는건지?


by 유선일 [2019.04.03 13:23:12]

데이터는 해당 날짜에 두건이 될지 더 될지 모릅니다. 편의상 2건만 표시한 겁니다.

시간이 따로 기록되고 있습니다.

하지만 시간에 따라 정렬을 해도 되고 안해도 상관은 없습니다.

 


by 마농 [2019.04.03 13:29:49]

가변컬럼으로의 피벗은 안됩니다. 고정개수 고정값만 가능합니다.
결과표와 같은 엑셀의 열병합 형태의 표현도 불가능합니다.
열병합되어 있는 20190109 이 컬럼 타이틀인가요? 값인가요?


by 유선일 [2019.04.03 13:40:29]

날짜 데이터가 컬럼으로 하려고 하는데 생각해 보니 안될꺼 같네요.,

값으로 넣으면 병합없이 그냥 상단에 컬럼 처럼 나오게 할 수 없을까요?

그 뒤에 가공은 프로그램에서 처리하면 될거 같습니다.


by 마농 [2019.04.03 13:41:14]
WITH t AS
(
SELECT '20190109' dt, '01' tm, 33.4 x1, 33.3 x2
UNION ALL SELECT '20190109', '02', 33.0, 33.1
UNION ALL SELECT '20190111', '03', 33.3, 33.5
UNION ALL SELECT '20190111', '04', 33.9, 34.0
UNION ALL SELECT '20190113', '05', 33.2, 33.4
UNION ALL SELECT '20190113', '06', 32.9, 33.2
UNION ALL SELECT '20190119', '07', 33.0, 33.3
UNION ALL SELECT '20190119', '08', 33.5, 33.7
UNION ALL SELECT '20190120', '09', 33.3, 33.4
UNION ALL SELECT '20190120', '10', 33.6, 33.8
)
SELECT *
  FROM (SELECT CAST(dt AS VARCHAR(8)) DT
             , CAST(x1 AS VARCHAR(8)) X1
             , CAST(x2 AS VARCHAR(8)) X2
             , ROW_NUMBER() OVER(ORDER BY dt, tm) rn
          FROM t
        ) a
 UNPIVOT (x FOR gb IN (dt, x1, x2)) a
 PIVOT (MIN(x) FOR rn IN (  "1",  "2",  "3",  "4",  "5",  "6",  "7",  "8",  "9", "10"
                      -- , "11", "12", "13", "14", "15", "16", "17", "18", "19", "20"
                         ) ) a
;

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입