데이터 합치기 문의 0

by 구사일생 [SQL Query] 데이터 합치기 LISTAGG [2025.04.09 20:13:39]


--DATA

202501  GA001  A0001    50000
202502  GA001  A0001    55000

202501  GA002  A0001    50000

202502  GA003  A0001    50000

202501  GA004  A0001    35000
202502  GA004  A0001    30000

--결과

GA001    50000,55000
GA002    50000,0
GA003    0,50000
GA003    35000,30000

 

A001 지점의 월별, 상품별(GA001, GA002,GA003, GA004)의 월별 판매 증감 추세를 확인 하려고 합니다.

LISTAGG로 상품코드별로 합쳐서 두 값을 비교 하면 될 듯 한데

GA002는 202501월 판매만 있고
GA003는 202502월 판매만 있어서 

LISTAGG를 했는때 앞부분의 값이 없는지 뒷부분의 값이 없는지 어떻게 확인을 할수 있을까요?

LISTAGG(판매금액, ',') WITHIN GROUP(ORDER BY 상품코드, 판매월)

위와 같이 나오길 원합니다.

by 마농 [2025.04.10 09:48:59]
WITH t AS
(
SELECT '202501' ym, 'GA001' prd, 'A0001' dep, 50000 amt FROM dual
UNION ALL SELECT '202502', 'GA001', 'A0001', 55000 FROM dual
UNION ALL SELECT '202501', 'GA002', 'A0001', 50000 FROM dual
UNION ALL SELECT '202502', 'GA003', 'A0001', 50000 FROM dual
UNION ALL SELECT '202501', 'GA004', 'A0001', 35000 FROM dual
UNION ALL SELECT '202502', 'GA004', 'A0001', 30000 FROM dual
)
SELECT dep
     , prd
     , NVL(SUM(DECODE(ym, '202501', amt)), 0) amt1
     , NVL(SUM(DECODE(ym, '202502', amt)), 0) amt2
  FROM t
 WHERE dep = 'A0001'
   AND ym IN ('202501', '202502')
 GROUP BY dep, prd
 ORDER BY dep, prd
;

 


by 구사일생 [2025.04.10 20:32:45]

고전적인 방법이 역시 훨씬 나은 경우네요 그것도  모르고 listagg로 합쳤다가 다시 구분자로 컬럼을 regexp_substr해서 나눠서 하려고 했으니

역시 기본으로 돌아 가는게 항상 중요 한가 봅니다. 감사합니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입