Develops/SQL
[Tibero] AGGR_CONCAT 함수 (여러 행을 하나의 값으로 합치기)
SLOTH91
2024. 7. 14. 14:10
반응형
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
반응형