SQL*Plus, Inline view의 활용 – 단계적 조인을 위한 활용: Group by 후 Decode

SQL*Plus, Inline view의 활용 – 단계적 조인을 위한 활용: Group by 후 Decode

/**
 * 수정전
 */
SELECT
	DEPT_CD
	, SUM(SALE_QTY) TOTAL
	, SUM(DECODE(SUBSTR(S_DATE, 7, 2), '01', QTY)) S_01
	, SUM(DECODE(SUBSTR(S_DATE, 7, 2), '02', QTY)) S_02
	, ...
	, SUM(DECODE(SUBSTR(S_DATE, 7, 2), '31', QTY)) S_31
FROM SALE
WHERE YYMM = :IN_DATE
AND SAUP = :SAUP
GROUP BY DEPT_CD;

원시 테이블 row마다 Decode를 수행

/**
 * 수정후
 */
SELECT
	DEPT_CD
	, SUM(S_QTY) TOTAL
	, SUM(DECODE(DD, '01', S_QTY)) S_01
	, SUM(DECODE(DD, '02', S_QTY)) S_02
	, ...
	, SUM(DECODE(DD, '31', S_QTY)) S_31
FROM 
(
	SELECT
		DEPT_CD
		, SUBSTR(S_DATE, 7, 2) DD
		, SUM(QTY) S_QTY
	FROM SALE
	WHERE YYMM = :IN_DATE
	AND SAUP = :SAUP
	GROUP BY DEPT_CD, SUBSTR(S_DATE, 7, 2) 
	/**
	 * 공통분모인 SUBSTR(S_DATE, 7, 2)를 
	 * GROUP BY 절에 추가
	 */
)
GROUP BY DEPT_CD

원문 출처
Encore – 대용량 데이터베이스

Leave a Reply