--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 상품코드, 판매월)
위와 같이 나오길 원합니다.
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
;
고전적인 방법이 역시 훨씬 나은 경우네요 그것도 모르고 listagg로 합쳤다가 다시 구분자로 컬럼을 regexp_substr해서 나눠서 하려고 했으니
역시 기본으로 돌아 가는게 항상 중요 한가 봅니다. 감사합니다.