여러컬럼 행열 변환 0 5 1,819

by 도겸아빠 [SQL Query] [2016.11.30 11:55:04]


안녕하세요.

 

with t AS
(
SELECT 1 c, 'a' v, 'aa' k FROM dual UNION ALL
SELECT 2 c, 'b' v, 'bb' k FROM dual UNION ALL
SELECT 3 c, 'c' v, 'cc' k FROM dual UNION ALL
SELECT 4 c, 'd' v, 'dd' k FROM dual
)
SELECT * FROM t

와 같이 컬럼은 c,v,k등 복수개가 되고

값은 

1  2  3  4
a  b  c  d
aa bb cc dd  

요렇게 아래로 만들고 싶은데 

도움 부탁드립니다.

 

 

by jkson [2016.11.30 12:39:46]
WITH T AS
(
SELECT '1' C, 'a' V, 'aa' K FROM DUAL UNION ALL
SELECT '2' C, 'b' V, 'bb' K FROM DUAL UNION ALL
SELECT '3' C, 'c' V, 'cc' K FROM DUAL UNION ALL
SELECT '4' C, 'd' V, 'dd' K FROM DUAL
)
--행복사
SELECT MAX(DECODE(C,1,VAL)) A, MAX(DECODE(C,2,VAL)) B, MAX(DECODE(C,3,VAL)) C, MAX(DECODE(C,4,VAL)) D
FROM
(
SELECT LV, DECODE(LV,1,C,2,V,3,K) VAL, C FROM T
,(SELECT LEVEL LV FROM DUAL CONNECT BY LEVEL <= 3)
)
GROUP BY LV

--PIVOT/UNPIVOT 11G
SELECT A,B,C,D FROM
(
SELECT GB, VAL, RN 
FROM (SELECT C,V,K,ROWNUM RN FROM T)
UNPIVOT (VAL FOR GB IN (C AS 1, V AS 2 ,K AS 3))
)
PIVOT(MAX(VAL) FOR RN IN (1 A,2 B,3 C,4 D))

 


by 마농 [2016.12.01 10:15:06]
-- PIVOT/UNPIVOT 사용 시 인라인뷰는 필요 없어요.
SELECT *
  FROM (SELECT c, v, k, ROWNUM rn FROM t)
 UNPIVOT (val FOR gb IN (c AS 1, v AS 2, k AS 3))
 PIVOT (MAX(val) FOR rn IN (1 a, 2 b, 3 c, 4 d))
;

 


by jkson [2016.12.01 11:30:53]

쓸데없는 인라인뷰를 썼네요; 감사합니다~


by 마농 [2016.11.30 13:34:30]

결과의 (1,2,3,4) 가 컬럼 타이틀 인가요? 값인가요?


by 도겸아빠 [2016.11.30 15:27:32]

jkson님 도움으로 해결하였습니다.

감사합니다.^^

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