본문 바로가기
Develops/SQL

[Tibero] AGGR_CONCAT 함수 (여러 행을 하나의 값으로 합치기)

by SLOTH91 2024. 7. 14.
반응형

AGGR_CONCAT 함수

AGGR_CONCAT는 그룹 내의 모든 로우에 대해 문자열과 구분자를 접합하여 하나의 문자열로 만들어 반환하는 함수이다. NULL 값을 반환하는 파라미터는 결과로부터 제외된다. AGGR_CONCAT의 세부 내용은 다음과 같다.

 

 

사용 예시

SELECT MENU_ID
     , MENU_NM
     , MENU_CTG_CD
     , MENU_DEPTH
     , MENU_ODRG
     , ODRG
     , CNCT_BUTT_NO
     , CNCT_MENU_ID
     , BEF_MENU_ID
     , (CASE WHEN MENU_SBST IS NULL OR MENU_SBST = '' THEN 'N' ELSE 'Y' END) AS MENU_SBST
  FROM SCENA_MENU_MGT M JOIN 
       ( SELECT LOW_MENU_ID
              , AGGR_CONCAT(M.MENU_ODRG , '.' ORDER BY M.MENU_DEPTH ASC) AS ODRG
           FROM LOW_MENU_MGT MT JOIN
                SCENA_MENU_MGT M
             ON M.MENU_ID       = MT.MENU_ID
          WHERE LOW_MENU_ID     IN (SELECT MENU_ID
                                      FROM SCENA_MENU_MGT
                                     WHERE SCENA_ID = #{scenaId})
          GROUP BY LOW_MENU_ID
       ) L ON L.LOW_MENU_ID     = M.MENU_ID
 WHERE SCENA_ID                 = #{scenaId}
 ORDER BY (CASE WHEN LENGTH(SUBSTR(ODRG, INSTR(ODRG, '.', -1) + 1)) > 1
                THEN SUBSTR(ODRG, 0, INSTR(ODRG, '.', -1)) || LPAD('', LENGTH(SUBSTR(ODRG, INSTR(ODRG, '.', -1) + 1)) -1, '9') || SUBSTR(ODRG, INSTR(ODRG, '.', -1) + 1)
                ELSE ODRG
           END)

 

 

 

오라클의 경우에는 LISTAGG 집계함수를 사용하면 되는데, 설명은 아래 블로그를 참고하면 된다.

 

[ORACLE] LISTAGG 집계함수 (여러 행을 하나의 값으로 합치기)

오라클에서 여러 행의 컬럼 값을 하나로 합쳐주는 기능을 지원하는 함수는 버전별로 상이하다. XMLAGG : 오라클 9i 이하 WM_CONCAT : 오라클 10g ~ 11g R1 LISTAGG : 오라클 11g R2 ~ ( DISTINCT 를 사용한 중복제

sloth91.tistory.com

 

 

반응형