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
운영게시판
최근게시물
Oracle Q&A 39120 게시물 읽기
No. 39120
세로를 가로로 변환하는 방법
작성자
제로(ji1corea)
작성일
2011-11-23 22:56
조회수
7,359

 NM               GW_NM

홍길동          국어

홍길동          수학

홍길동          한국지리

이순신          국어

이순신          영어

이순신          세계사

이순신          물리

강감찬          지구과학

 

데이터가 위와 같이 있을 때 아래와 같이 보여주려고 합니다.

 

홍길동          국어, 수학, 한국지리

이순신          국어, 영어, 세계사, 물리

강감찬          지구과학

 

여러 게시물을 검색해봐도 뾰족한 답이 없네요.

도움 부탁드립니다.

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

select nm, ltrim(sys_connect_by_path(gw_nm,','),',') as nm

   from (

         select nm,

                 gw_nm

                 , row_number() over (partition by nm order by gw_nm) rn

                 , count (*) over (partition by nm ) cnt

           from table

        ) a

  where level = cnt

  start with rn = 1

 

MAX(MAX)님이 2011-11-24 14:39에 작성한 댓글입니다.

 MAX님 답변 감사합니다만,

 

WITH T AS

(

SELECT '홍길동' NM, '국어' GW_NM FROM DUAL UNION ALL

SELECT '홍길동', '수학' FROM DUAL UNION ALL

SELECT '홍길동', '한국지리' FROM DUAL UNION ALL

SELECT '이순신', '국어' FROM DUAL UNION ALL

SELECT '이순신', '영어' FROM DUAL UNION ALL

SELECT '이순신', '세계사' FROM DUAL UNION ALL

SELECT '이순신', '물리' FROM DUAL UNION ALL

SELECT '강감찬', '지구과학' FROM DUAL

)

SELECT NM, LTRIM(SYS_CONNECT_BY_PATH(GW_NM,','),',') AS GW_NM

   FROM (

         SELECT NM

              , GW_NM

              , ROW_NUMBER() OVER (PARTITION BY NM ORDER BY GW_NM) RN

              , COUNT (*) OVER (PARTITION BY NM ) CNT

           FROM T

        ) A

  WHERE LEVEL = CNT

  START WITH RN = 1

 

위 query를 실행하니 'CONNECT BY 구를 지정해 주십시오'라는 오류가......

제로(ji1corea)님이 2011-11-24 16:40에 작성한 댓글입니다.

-- 다음 추가하시면 되구요. --
 START WITH rn = 1
 CONNECT BY PRIOR nm = nm
        AND PRIOR rn = rn - 1


-- 요런 방법도 있습니다. --
SELECT nm
     , wm_concat(gw_nm) gw_nm_list
  FROM t
 GROUP BY nm
;

마농(manon94)님이 2011-11-24 17:03에 작성한 댓글입니다.

 MAX님, 마농님 모두 진심으로 감사드립니다.

 

제가 여기저기 찾아보니 이런 방법도 있네요.

 

 

WITH T AS

(

SELECT '홍길동' NM, '국어' GW_NM FROM DUAL UNION ALL

SELECT '홍길동', '수학' FROM DUAL UNION ALL

SELECT '홍길동', '한국지리' FROM DUAL UNION ALL

SELECT '이순신', '국어' FROM DUAL UNION ALL

SELECT '이순신', '영어' FROM DUAL UNION ALL

SELECT '이순신', '세계사' FROM DUAL UNION ALL

SELECT '이순신', '물리' FROM DUAL UNION ALL

SELECT '강감찬', '지구과학' FROM DUAL

)

SELECT NM, LTRIM(SYS_CONNECT_BY_PATH(GW_NM,','),',') AS GW_NM

   FROM (SELECT NM, GW_NM

              , ROW_NUMBER() OVER (PARTITION BY NM ORDER BY GW_NM) RN

              , COUNT(*) OVER (PARTITION BY NM ) CNT

           FROM T

        ) A

  WHERE LEVEL = CNT

  START WITH rn = 1

  CONNECT BY PRIOR nm = nm

         AND PRIOR rn + 1 = rn

 

 

 

WITH T AS

(

SELECT '홍길동' NM, '국어' GW_NM FROM DUAL UNION ALL

SELECT '홍길동', '수학' FROM DUAL UNION ALL

SELECT '홍길동', '한국지리' FROM DUAL UNION ALL

SELECT '이순신', '국어' FROM DUAL UNION ALL

SELECT '이순신', '영어' FROM DUAL UNION ALL

SELECT '이순신', '세계사' FROM DUAL UNION ALL

SELECT '이순신', '물리' FROM DUAL UNION ALL

SELECT '강감찬', '지구과학' FROM DUAL

)

SELECT NM

     , WM_CONCAT(GW_NM) GW_NM_9I

     , SUBSTR(XMLAGG(XMLELEMENT(X,',',GW_NM)).EXTRACT('//text()'), 2) GW_NM_10G

     , LISTAGG(GW_NM, ',') WITHIN GROUP(ORDER BY GW_NM) GW_NM_11G

FROM T

GROUP BY NM

 

제로(ji1corea)님이 2011-11-24 17:19에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
39124날자 관련 하여 질문 드립니다. 정말 모르겠네요 [2]
호동이네남일이
2011-11-24
3715
39122메뉴 구조에서 시작과 종료를 확인 [2]
김주환
2011-11-24
4679
39121rollup에 총계대신 소계값중 max값을 출력하고 싶습니다. [2]
문성환
2011-11-24
5104
39120세로를 가로로 변환하는 방법 [4]
제로
2011-11-23
7359
39118통계쿼리좀 부탁드려여 [3]
장선각
2011-11-22
5040
39117같은테이블 조인.. 튜닝 부탁드립니다 [2]
궁금이
2011-11-22
4875
39116테이블 생성시 권한 문제... [1]
다다익선
2011-11-22
3971
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.016초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다