여러행을 한행으로 만드는 방법 질문 0 4 1,210

by fly [SQL Query] [2016.12.02 09:23:09]


SELECT 1 idx, 'A' col1, 11 col2, '가' col3 FROM dual
UNION ALL SELECT 2, 'B', 22, '나' FROM dual
UNION ALL SELECT 3, 'C', 33, '다' FROM dual
UNION ALL SELECT 4, 'D', 44, '라' FROM dual
UNION ALL SELECT 5, 'E', 55, '마' FROM dual ;

위와 같은 여러행의 데이터를 idx 순으로 아래처럼 한행으로 표현하고 싶습니다.

SELECT 'A' col1, 11 col2, '가' col3,
    'B' col4, 22 col5, '나' col6,
       'C' col7, 33 col8, '다' col9,
       'D' col10, 44 col11, '라'col12,
       'E' col13, 55 col14, '마' COL15
FROM dual ;

제가 아는 방법은 아래와 같은 방법인데 좀 더 효율적인 방법이 없을까요?

행의 개수가 고정이라 아래와 같은 방법을 쓰긴 했지만 데이터 건수가 많아질 경우 좀 무식한 방법인듯 합니다.

 

WITH t AS
(
SELECT 1 idx, 'A' col1, 11 col2, '가' col3 FROM dual
UNION ALL SELECT 2, 'B', 22, '나' FROM dual
UNION ALL SELECT 3, 'C', 33, '다' FROM dual
UNION ALL SELECT 4, 'D', 44, '라' FROM dual
UNION ALL SELECT 5, 'E', 55, '마' FROM dual
)

SELECT MAX(CASE WHEN idx = 1 THEN col1 END) AS col1
  , MAX(CASE WHEN idx = 1 THEN col2 END) AS col2
     , MAX(CASE WHEN idx = 1 THEN col3 END) AS col3
     , MAX(CASE WHEN idx = 2 THEN col1 END) AS col4
     , MAX(CASE WHEN idx = 2 THEN col2 END) AS col5
     , MAX(CASE WHEN idx = 2 THEN col3 END) AS col6
     , MAX(CASE WHEN idx = 3 THEN col1 END) AS col7
     , MAX(CASE WHEN idx = 3 THEN col2 END) AS col8
     , MAX(CASE WHEN idx = 3 THEN col3 END) AS col9
     , MAX(CASE WHEN idx = 4 THEN col1 END) AS col10
     , MAX(CASE WHEN idx = 4 THEN col2 END) AS col11
     , MAX(CASE WHEN idx = 4 THEN col3 END) AS col12
     , MAX(CASE WHEN idx = 5 THEN col1 END) AS col13
     , MAX(CASE WHEN idx = 5 THEN col2 END) AS col14
     , MAX(CASE WHEN idx = 5 THEN col3 END) AS col15
FROM t ;

고수님들의 답변 부탁드립니다.

 

by 우리집아찌 [2016.12.02 09:40:08]

문자열로 받아서 프로그램에서 잘라쓰던가(split)

다이나믹쿼리로  사용하시면 됩니다

http://www.gurubee.net/article/55512


by 마농 [2016.12.02 09:57:59]
SELECT *
  FROM t
 PIVOT (MIN(col1) c1, MIN(col2) c2, MIN(col3) c3 FOR idx IN (1, 2, 3, 4, 5))
;

 


by fly [2016.12.02 10:10:50]

역시 방법이 있군요. 감사합니다^^


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