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 1826 게시물 읽기
No. 1826
[질문] 여러 ROW를 한 ROW의 한 필드로 모으기 (가로 정렬 출력)
작성자
어깨넘
작성일
2009-03-09 19:14ⓒ
2009-03-09 19:18ⓜ
조회수
14,466

다른 분이 옛날에 질문하셨던데요... 그것하고는 좀 달라서 질문 올립니다.

ID  내용
--- ------
A   내용1
A   내용2
.
.
.

위의 결과를 다음과 같이 나오게 하고 싶습니다.
(내용이 몇개가 나올지 모릅니다만 100개까지는 안갈것 같습니다.
 ID는 없다고 보시면 됩니다.
 혹 GROUP BY로 어째볼까 해서 그냥 찍은 놈이라서리~)

ID  내용들
--- ----------------------
A   내용1_내용2_내용3_....   (※ _ : 빈칸입니다.)

ORACLE 에는 쉽게하는 방법이 있는 것 같은데...
DB2에는 어떻게 해야할지... 아무리 고민해도 모르겠네요!

한번의 쿼리로 SELECT 할 수 있었으면 좋겠습니다.

고수님들은 쉽게 하실 듯...

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

Pivot table을 만드는 query를 찾으시는 것 같은데, 맞는지 모르겠네요. 필요해서 에전에 찾아 놓은  url 입니다. 혹시 몰라, 참고로 반대의 경우인 unpivot table query도 함께 올립니다.


pivot table query

http://it.toolbox.com/blogs/db2luw/pivot-query-12757


unpivot table query

http://it.toolbox.com/blogs/db2luw/unpivot-query-12798

 

그리고 제 기억에, oracle에서도 한 번에 되지는 않았던 것 같고, 이와 비슷하게 했던 것 같네요. ^^

도움이 되셨기를 바랍니다

짝퉁헤리포터(bh1004)님이 2009-03-12 03:47에 작성한 댓글입니다.
오라클도 어려운 방법밖에는 모르겠습니다.

아래는 db2에서 가져오는 방식이고요

tmp01테이블은 임시테이블로 그냥 100개정도의 내용을 만들기 위함입니다.

contents < 5로 되어있는데요... 100으로 해주시면 내용이 100개가 들어가고요.

아래 실제쿼리에서 예상되는 100개정도의 max문을 만들어주신후 ||(파이프)로 연결해주시면

될거 같습니다. 오라클도 마찬가지일겁니다.

즉 100개의 max문을 만들어서 연결해주셔야 합니다.

응용해서 사용하시면 좋을듯 싶네요..^^;;



with tmp01 (id, contents) as
(
 select  'A' as id, 1 as contents from sysibm.sysdummy1
 union all
 select
      'A' as id,
  contents + 1 as contents
 from tmp01
 where contents < 5
),
tmp02(id, contents) as
(
 select id,
  rtrim(char(contents)) contents
 from tmp01
)
select
 id, max(contents_1)||max(contents_2)||max(contents_3)||max(contents_4)||max(contents_5)
from

select
 id, contents
 ,max(case when contents = '1' then '내용'||contents||'_' else '' end ) as contents_1
 ,max(case when contents = '2' then '내용'||contents||'_' else '' end ) as contents_2 
 ,max(case when contents = '3' then '내용'||contents||'_' else '' end ) as contents_3  
 ,max(case when contents = '4' then '내용'||contents||'_' else '' end ) as contents_4
 ,max(case when contents = '5' then '내용'||contents||'_' else '' end ) as contents_5 
from tmp02
group by id, contents
) a
group by id
with ur
셀루님이 2009-08-31 10:14에 작성한 댓글입니다.
이 댓글은 2009-08-31 10:17에 마지막으로 수정되었습니다. Edit
[Top]
No.
제목
작성자
작성일
조회
1842쿼리문 옵션중에 with가 있는데 무엇에 쓰는건가요? [1]
김창우
2009-03-27
9858
1837Linkz
google
2009-03-16
8943
1836SELECT문으로 현재 사용자의 정보를 확인하는 방법은 없을까요?
초보
2009-03-15
9399
1826[질문] 여러 ROW를 한 ROW의 한 필드로 모으기 (가로 정렬 출력) [2]
어깨넘
2009-03-09
14466
1825load/import 시 구분자있는 텍스트파일 명령어좀 갈켜주세염! [1]
용용
2009-03-05
10979
1824DB2 쿼리 실행시 에러 질문입니다. [1]
조경철
2009-03-05
14478
1823DB2에도 오라클과 같은 힌트가 존재 하나요? [2]
정차신
2009-03-04
11026
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.049초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다