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 40147 게시물 읽기
No. 40147
여러 row의 데이터를 구분자로 한줄로 뽑고 싶습니다...
작성자
짱아(ssam4545)
작성일
2013-05-29 16:18
조회수
9,149

Data:

YN1 YN2 VALUE
Y N a
Y N b
Y Y c
N Y d
N Y e

이런 식으로 테이블이 있다면 아래처럼 결과를 구하고 싶은데요

value1 value2
a,b,c c,d,e

이렇게 Y 인것만 모아서 보여주싶은데요

그런데 YN1 YN2 둘다 Y인 경우도있을수있어서요
이런경우는 YN1이 Y인 경우 YN2가 Y인경우 따로 조회해야 하나요


검색해보니 wm_concat , LISTAGG 이란것이 있더라고요
근데 오라클이 10g 미만 버전인것같습니다.
 

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

WITH TEST AS (
  SELECT 'Y' yn1, 'N' yn2, 'a' value FROM DUAL UNION ALL
  SELECT 'Y', 'N', 'b'  FROM DUAL UNION ALL
  SELECT 'Y', 'Y', 'c'  FROM DUAL UNION ALL
  SELECT 'N', 'Y', 'd'  FROM DUAL UNION ALL
  SELECT 'N', 'Y', 'e'  FROM DUAL
)
SELECT *
  FROM (
          SELECT SUBSTR ( MAX ( SYS_CONNECT_BY_PATH ( value, ',' )), 2 )
            FROM (
                  SELECT yn1
                       , yn2
                       , value
                       , row_number () over ( order by value ) rn
                    FROM test
                   WHERE yn1 = 'Y'
          )
          START WITH rn = 1
          CONNECT BY PRIOR rn = rn - 1
                 AND PRIOR yn1 = yn1
) a
,
(
          SELECT SUBSTR ( MAX ( SYS_CONNECT_BY_PATH ( value, ',' )), 2 )
            FROM (
                  SELECT yn1
                       , yn2
                       , value
                       , row_number () over ( order by value ) rn
                    FROM test
                   WHERE yn2 = 'Y'
          )
          START WITH rn = 1
          CONNECT BY PRIOR rn = rn - 1
                 AND PRIOR yn2 = yn2
)

채용근(taiji97)님이 2013-05-29 17:16에 작성한 댓글입니다.

답변 감사합니다.

정말 도움이 되네요 ㅜㅜ

정말 감사합니다

짱아(ssam4545)님이 2013-05-29 17:53에 작성한 댓글입니다.

WITH t AS
(
SELECT 'Y' yn1, 'N' yn2, 'a' v FROM dual
UNION ALL SELECT 'Y', 'N', 'b' FROM dual
UNION ALL SELECT 'Y', 'Y', 'c' FROM dual
UNION ALL SELECT 'N', 'Y', 'd' FROM dual
UNION ALL SELECT 'N', 'Y', 'e' FROM dual
)
SELECT RTRIM(XMLAGG(XMLELEMENT(x, v1, ',') ORDER BY v1).EXTRACT('//text()'), ',') v1
     , RTRIM(XMLAGG(XMLELEMENT(x, v2, ',') ORDER BY v2).EXTRACT('//text()'), ',') v2
  FROM (SELECT DECODE(yn1, 'Y', v) v1
             , DECODE(yn2, 'Y', v) v2
          FROM t
        )
;

마농(manon94)님이 2013-05-30 11:01에 작성한 댓글입니다.

마농 // XMLAGG 이 함수 9i에서도 되는거에여? 10g 부터 되는줄 알았네 ㅎㅎ

채용근(taiji97)님이 2013-05-30 11:06에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
40150프로시저 작업 스케줄러 등록하기
초보자
2013-05-30
6681
40149그룹별 번호주기 ? [5]
궁금해요
2013-05-29
8625
40148Partition Table 사용시 속도 저하 문제 [1]
이철재
2013-05-29
6956
40147여러 row의 데이터를 구분자로 한줄로 뽑고 싶습니다... [4]
짱아
2013-05-29
9149
40146대형 프로젝트에서 DB 구조...
홍순우
2013-05-27
6523
40144유니크하고 랜덤한 일련번호 처리 [4]
초심
2013-05-24
7337
40143group by 절에 대한 질문이요 ㅜㅜ [4]
짱먹었어
2013-05-24
6775
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.027초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다