database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
ㆍDB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
DB2 Q&A 1622 게시물 읽기
No. 1622
가로로 나오는 값을 세로로 나오게 하고싶습니다.
작성자
조동연
작성일
2008-06-02 18:06
조회수
12,880

select 1,2,3,4,5 from sysibm.dummy 를 하면 

-------------
1  2   3   4   5
-------------

이렇게 나오는걸 

---
 1
---
 2
---
 3
---
 4
---
 5
---
이렇게 나오게 하고 싶습니다.

이 글에 대한 댓글이 총 3건 있습니다.



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 결합이 핵심 되겠습니다.

장영인님이 2008-06-02 18:35에 작성한 댓글입니다. Edit

일단 이렇게 답변해주셔서 감사합니다..

근데 이건 그냥 예를 든거거든요..숫자가 커지면 다 유니온을 걸순 없잖아요..

한번에 가능한지를 알고 싶었거든요..

조동연님이 2008-06-03 09:11에 작성한 댓글입니다. Edit


아래 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이 필요합니다.

수고하세요.
  

배성수(Ultrazacos)님이 2008-06-03 10:59에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
1626cli 질문드립니다. [2]
이도희
2008-06-04
10138
1625스토어드 프로시져 빌딩 [5]
MARIN
2008-06-03
15751
162380040e14 에러의 예외문은 못하나요?
teduri
2008-06-02
10789
1622가로로 나오는 값을 세로로 나오게 하고싶습니다. [3]
조동연
2008-06-02
12880
1620IDENTITY ALWAYS 컬럼 값 받아오는 방법 [1]
조성환
2008-05-30
11237
1619날짜관련문제... [3]
윤동민
2008-05-29
11776
1618스토어드프로시저 빌드관련 문제 [11]
박경욱
2008-05-29
10820
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.051초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다