2011. 8. 30. 15:36

문자열 결합 그룹핑

아래 처럼 두개의 테이블이 있고

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