'문자열'에 해당되는 글 2건
- 2013.10.18 [Oracle] SYS_CONNECT_BY_PATH 문자열 합치기??
- 2011.08.30 문자열 결합 그룹핑
[Oracle] SYS_CONNECT_BY_PATH 문자열 합치기??
## SAMPLE 1
SELECT SUBSTRB(MAX(SYS_CONNECT_BY_PATH(CARTONID,', ')),2) CARTONID
FROM (
SELECT ROWNUM RW, NVL(B.CARTONID,C.CARTONID) CARTONID
FROM TTASKINHI A, TCONTENT B, TCONTENTHI C
WHERE A.OWNERID = '1474'
AND A.ORDERID = '131001-901642'
AND A.ITEMID = '1118825'
AND A.CONTENTID = B.CONTENTID(+)
AND A.CONTENTID = C.CONTENTID(+)
)
START WITH RW=1
CONNECT BY PRIOR RW=RW-1;
1. 내부 쿼리 실행시
RW CARTONID
1 32021092K
2 32021092K
3 32021092K
4 32021092K
2. 전체 쿼리 실행시
CARTONID
32021092K, 32021092K, 32021092K, 32021092K
## SAMPLE 2
SELECT A, MAX(SYS_CONNECT_BY_PATH(B,'/')) B
FROM (
SELECT ROW_NUMBER() OVER(PARTITION BY A ORDER BY A) AS RNUM
, A, B
FROM (
SELECT 1 A, '엄마' B FROM DUAL
UNION
SELECT 1 A, '아빠' B FROM DUAL
UNION
SELECT 1 A, '이모' B FROM DUAL
UNION
SELECT 2 A, '삼촌' B FROM DUAL
UNION
SELECT 2 A, '오빠' B FROM DUAL
)
)
START WITH RNUM = 1
CONNECT BY PRIOR RNUM = RNUM - 1 AND PRIOR A=A
GROUP BY A
1. 내부 쿼리 실행시
A B
1 아빠
1 엄마
1 이모
2 삼촌
2 오빠
2. 전체 쿼리 실행시
A B
1 /아빠/엄마/이모
2 /삼촌/오빠
3. RNUM = 1 -> RNUM = 2 변경시
A B
1 /엄마/이모
2 /오빠
---------------------------------------------------------------------------------------------
### 타블로그 참조 ###
'Database / Sql' 카테고리의 다른 글
[Oracle] 테이블 스페이스 용량/사용량 산출 (0) | 2014.03.04 |
---|---|
[Oracle] SID, SPID 를 통해 수행하고 있는 쿼리 찾기 (0) | 2013.11.27 |
[Oracle] 대소문자 처리 (0) | 2013.09.26 |
[Oracle] TOAD 스크립트 조회 및 백업 (0) | 2013.09.26 |
[Oracle] session 수 체크 및 session 죽이기 (0) | 2013.07.31 |
문자열 결합 그룹핑
아래 처럼 두개의 테이블이 있고
TB_A
------ ------- ------
A_ID B_ID A_DATA
------ ------- ------
1 1 가가
2 1 나나
3 1 다다
4 2 거거
5 2 너너
....
TB_B
------- ------
B_ID B_DATA
------- ------
1 123
2 456
3 789
4 123
5 111
여기서 TB_B 의 B_ID = 1인 데이타를 조회 한 결과...
------- ------ -------
B_ID B_DATA A_DATA
------- ------ -------
1 123 가가, 나나, 다다 <--- 이렇게 한줄로...
[MSSQL]
SELECT B_ID, B_DATA,
STUFF( (SELECT ',' + A_DATA
FROM TB_A A WHERE A.B_ID = B.B_ID
FOR XML PATH('')),1,1,'')
FROM TB_B B
WHERE B_ID = 1;
[ORACLE]
SELECT B_ID,
SUBSTR(MAX(sys_connect_By_pAth(A_DATA,',')),2)
FROM (
SELECT A.B_ID, B_DATA,A_DATA,
ROW_NUMBER() OVER(PARTITION BY A.B_ID ORDER BY A.A_ID) rnum
FROM TB_A A, TB_B B
WHERE A.B_ID = B.B_ID
)
WHERE B_ID = 1
START WITH rnum = 1
CONNECT BY PRIOR rnum = rnum-1
AND PRIOR B_ID = B_ID
GROUP BY B_ID;
'Database / Sql' 카테고리의 다른 글
[Oracle] FLASHBACK (0) | 2011.09.02 |
---|---|
[Oracle] BIN$... 으로 시작하는 테이블 (0) | 2011.08.31 |
[Oracle] JOIN UPDATE (0) | 2011.05.25 |
[Oracle] JOIN UPDATE (bypass_ujvc 힌트) (0) | 2011.05.25 |
[MSSQL] WHERE 절에 CASE문 추가 (0) | 2011.03.21 |