select 1,2,3,4,5 from sysibm.dummy 를 하면 ------------- 1 2 3 4 5 ------------- 이렇게 나오는걸 --- 1 --- 2 --- 3 --- 4 --- 5 --- 이렇게 나오게 하고 싶습니다.
select col1 from (select 1 as col1 , 2 as col2, 3 as col3, 4 as col4, 5 as col5 from sysibm.dummy) where col1 = 1 UNION ALL select col2 from (select 1 as col1 , 2 as col2, 3 as col3, 4 as col4, 5 as col5 from sysibm.dummy) where col2 = 2 UNION ALL select col3 from (select 1 as col1 , 2 as col2, 3 as col3, 4 as col4, 5 as col5 from sysibm.dummy) where col3 = 3 UNION ALL select col4 from (select 1 as col1 , 2 as col2, 3 as col3, 4 as col4, 5 as col5 from sysibm.dummy) where col4 = 4 UNION ALL select col5 from (select 1 as col1 , 2 as col2, 3 as col3, 4 as col4, 5 as col5 from sysibm.dummy) where col5 = 5 복잡한 듯 하지만... 의미 파악을 위해 좀 늘여서 만들었습니다. 결국 한 데이터 씩 추출하여 UNION 결합이 핵심 되겠습니다.
일단 이렇게 답변해주셔서 감사합니다.. 근데 이건 그냥 예를 든거거든요..숫자가 커지면 다 유니온을 걸순 없잖아요.. 한번에 가능한지를 알고 싶었거든요..
아래 SQL로 가능합니다. with base(c1,c2,c3,c4,c5) as (values ('A','B','C','D','E'))
select /* LVL, C1,C2,C3,C4,C5, */ case mod(LVL-1,5) +1 when 1 then c1 when 2 then c2 when 3 then c3 when 4 then c4 when 5 then c5 else null end as Answer
from (values 1,2,3,4,5) vtemp(LVL), base mod의 인수는 항상 칼럼수를 사용하시면 되구, 이부분도 Regular Table인 경우 sysibm.systables의 colcount로 대체 가능합니다. 물론 강제적 level 생성 부분도 각 작업 테이블마다 sysibm.systables의 colcount를 이용 동적 대체가 가능합니다. WITH VTEMP(LVL) AS ( VALUES (1) UNION ALL SELECT (LVL + 1) FROM VTEMP WHERE LVL < (SELECT colcount FROM sysibm.systables NAME WHERE NAME ='XXX') ) 단, 이런 PIVOT 쿼리는 각 칼럼들을 ROW로 만들시에 동일한 데이타 타입이여야 합니다.즉 다르다면 Casting이 필요합니다. 수고하세요.