ORACLE 행렬변환 문의 0 3 2,830

by 통합문서 [SQL Query] 행열 변환 PIVOT UNPIVOT [2019.12.12 21:20:03]


아래와 같이 데이터가 있을때 원하는 컬럼만 행열을 변환하고 싶습니다.

예시 데이터로 ID값을 3종류로 하였으나 실제값은  GROUP BY 시 32개값이 나오고 CODE값은 1000개정도 됩니다.

ID CODE VAL1 VAL2 VAL3
100 1 d t h
100 2 r g gf
100 3 f s d
200 1 c f r
200 2 z f f
200 3 c vd g
300 1 z d d
300 2 ds df f
300 3 a d f

 

원하는 결과

- ID값이 열로 바뀌면서  CODE에 해당하는 VAL1, VAL2, VAL3값을 가져오면 됩니다.

PIVOT함수를 사용해서 하면 될 것 같은데 너무 헷갈리네요ㅠ

ID 100 200 300 400 500........3200
CODE VAL1 VAL2 VAL3 VAL1 VAL2 VAL3 VAL1 VAL2 VAL3 VAL1 VAL2 VAL3 VAL1 VAL2 VAL3
1 d t h c f r z d d            
2 r g gf z f f ds df f            
3 f s d c vd g a d f            

.

.

1000

by 마농 [2019.12.13 08:46:30]
WITH t AS
(
SELECT 100 id, 1 code, 'd' val1, 't' val2, 'h' val3 FROM dual
UNION ALL SELECT 100, 2, 'r' , 'g' , 'gf' FROM dual
UNION ALL SELECT 100, 3, 'f' , 's' , 'd'  FROM dual
UNION ALL SELECT 200, 1, 'c' , 'f' , 'r'  FROM dual
UNION ALL SELECT 200, 2, 'z' , 'f' , 'f'  FROM dual
UNION ALL SELECT 200, 3, 'c' , 'vd', 'g'  FROM dual
UNION ALL SELECT 300, 1, 'z' , 'd' , 'd'  FROM dual
UNION ALL SELECT 300, 2, 'ds', 'df', 'f'  FROM dual
UNION ALL SELECT 300, 3, 'a' , 'd' , 'f'  FROM dual
)
SELECT *
  FROM t
 PIVOT (MIN(val1) val1, MIN(val2) val2, MIN(val3) val3 FOR id IN (100, 200, 300, 400))
;

 


by 통합문서 [2019.12.13 10:37:49]

답변 감사합니다!! 다른얘긴데.. 분명 테이블에 컬럼이 있는데 pivot절 min안에 컬럼수행하면 부적합한식별자라고 나올까요. select a from table 하면 a컬럼 나오는데 pivot절 안에 min(a) 쓰면 a가 부적합한 식별자라고 나올까요.. 

 


by 통합문서 [2019.12.13 10:42:57]

아.. select 절에 * 을 쓰면 나오네요.

Pivot 절안에 쓰인 컬럼명이.자동으로 매핑되는데 명시적으로 써서 오류났었나봐요

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