SELECT TO_CHAR(sDate, 'YYYY') 년도, b.bCode, bName, qty
FROM book b
JOIN dsale d ON b.bCode = d.bCode
JOIN sale s ON d.sNum = s.sNum;
SELECT TO_CHAR(sDate, 'YYYY') 년도, b.bCode, bName,
NVL(SUM(DECODE(TO_CHAR(sDate, 'MM'), '01', qty)),0) M01,
NVL(SUM(DECODE(TO_CHAR(sDate, 'MM'), '02', qty)),0) M02,
NVL(SUM(DECODE(TO_CHAR(sDate, 'MM'), '03', qty)),0) M03,
NVL(SUM(DECODE(TO_CHAR(sDate, 'MM'), '04', qty)),0) M04,
NVL(SUM(DECODE(TO_CHAR(sDate, 'MM'), '05', qty)),0) M05,
NVL(SUM(DECODE(TO_CHAR(sDate, 'MM'), '06', qty)),0) M06,
NVL(SUM(DECODE(TO_CHAR(sDate, 'MM'), '07', qty)),0) M07,
NVL(SUM(DECODE(TO_CHAR(sDate, 'MM'), '08', qty)),0) M08,
NVL(SUM(DECODE(TO_CHAR(sDate, 'MM'), '09', qty)),0) M09,
NVL(SUM(DECODE(TO_CHAR(sDate, 'MM'), '10', qty)),0) M10,
NVL(SUM(DECODE(TO_CHAR(sDate, 'MM'), '11', qty)),0) M11,
NVL(SUM(DECODE(TO_CHAR(sDate, 'MM'), '12', qty)),0) M12
FROM book b
JOIN dsale d ON b.bCode = d.bCode
JOIN sale s ON d.sNum = s.sNum
GROUP BY TO_CHAR(sDate, 'YYYY'), b.bCode, bName
ORDER BY 년도, bCode;
-- 년도별 소계
SELECT TO_CHAR(sDate, 'YYYY') 년도, b.bCode, bName,
NVL(SUM(DECODE(TO_CHAR(sDate, 'MM'), '01', qty)),0) M01,
NVL(SUM(DECODE(TO_CHAR(sDate, 'MM'), '02', qty)),0) M02,
NVL(SUM(DECODE(TO_CHAR(sDate, 'MM'), '03', qty)),0) M03,
NVL(SUM(DECODE(TO_CHAR(sDate, 'MM'), '04', qty)),0) M04,
NVL(SUM(DECODE(TO_CHAR(sDate, 'MM'), '05', qty)),0) M05,
NVL(SUM(DECODE(TO_CHAR(sDate, 'MM'), '06', qty)),0) M06,
NVL(SUM(DECODE(TO_CHAR(sDate, 'MM'), '07', qty)),0) M07,
NVL(SUM(DECODE(TO_CHAR(sDate, 'MM'), '08', qty)),0) M08,
NVL(SUM(DECODE(TO_CHAR(sDate, 'MM'), '09', qty)),0) M09,
NVL(SUM(DECODE(TO_CHAR(sDate, 'MM'), '10', qty)),0) M10,
NVL(SUM(DECODE(TO_CHAR(sDate, 'MM'), '11', qty)),0) M11,
NVL(SUM(DECODE(TO_CHAR(sDate, 'MM'), '12', qty)),0) M12
FROM book b
JOIN dsale d ON b.bCode = d.bCode
JOIN sale s ON d.sNum = s.sNum
GROUP BY TO_CHAR(sDate, 'YYYY'), ROLLUP((b.bCode, bName))
ORDER BY 년도, bCode;
-- 년도별 소계, 총계
SELECT TO_CHAR(sDate, 'YYYY') 년도, b.bCode, bName,
NVL(SUM(DECODE(TO_CHAR(sDate, 'MM'), '01', qty)),0) M01,
NVL(SUM(DECODE(TO_CHAR(sDate, 'MM'), '02', qty)),0) M02,
NVL(SUM(DECODE(TO_CHAR(sDate, 'MM'), '03', qty)),0) M03,
NVL(SUM(DECODE(TO_CHAR(sDate, 'MM'), '04', qty)),0) M04,
NVL(SUM(DECODE(TO_CHAR(sDate, 'MM'), '05', qty)),0) M05,
NVL(SUM(DECODE(TO_CHAR(sDate, 'MM'), '06', qty)),0) M06,
NVL(SUM(DECODE(TO_CHAR(sDate, 'MM'), '07', qty)),0) M07,
NVL(SUM(DECODE(TO_CHAR(sDate, 'MM'), '08', qty)),0) M08,
NVL(SUM(DECODE(TO_CHAR(sDate, 'MM'), '09', qty)),0) M09,
NVL(SUM(DECODE(TO_CHAR(sDate, 'MM'), '10', qty)),0) M10,
NVL(SUM(DECODE(TO_CHAR(sDate, 'MM'), '11', qty)),0) M11,
NVL(SUM(DECODE(TO_CHAR(sDate, 'MM'), '12', qty)),0) M12
FROM book b
JOIN dsale d ON b.bCode = d.bCode
JOIN sale s ON d.sNum = s.sNum
GROUP BY ROLLUP(TO_CHAR(sDate, 'YYYY'), (b.bCode, bName))
ORDER BY 년도, bCode;