올해기준년으로 그해년도데이타값이 있는지여부를 판단합니다.
(최대 5년치 10년치로 표현합니다.)
해당년도의 데이타가 있을경우 '1' 없을경우 '0'
--결과값--
2004 2005 20009 2010 2011 2012
상품1 0 0 0 1 0 1
상품2 0 1 1 0 0 0
년도는 올해기준으로 최대 과거5년치나 과거10년치로 보여주어야합니다.
2004년도의 데이타가 없어도 기본컬럼정보는표출되어야합니다.
고수님들 답변 부탁드립니다.
SELECT item , NVL(MIN(DECODE(yyyy, TO_CHAR(sysdate, 'yyyy')-9, 1)), 0) yyyy_9 , NVL(MIN(DECODE(yyyy, TO_CHAR(sysdate, 'yyyy')-8, 1)), 0) yyyy_8 , NVL(MIN(DECODE(yyyy, TO_CHAR(sysdate, 'yyyy')-7, 1)), 0) yyyy_7 , NVL(MIN(DECODE(yyyy, TO_CHAR(sysdate, 'yyyy')-6, 1)), 0) yyyy_6 , NVL(MIN(DECODE(yyyy, TO_CHAR(sysdate, 'yyyy')-5, 1)), 0) yyyy_5 , NVL(MIN(DECODE(yyyy, TO_CHAR(sysdate, 'yyyy')-4, 1)), 0) yyyy_4 , NVL(MIN(DECODE(yyyy, TO_CHAR(sysdate, 'yyyy')-3, 1)), 0) yyyy_3 , NVL(MIN(DECODE(yyyy, TO_CHAR(sysdate, 'yyyy')-2, 1)), 0) yyyy_2 , NVL(MIN(DECODE(yyyy, TO_CHAR(sysdate, 'yyyy')-1, 1)), 0) yyyy_1 , NVL(MIN(DECODE(yyyy, TO_CHAR(sysdate, 'yyyy') , 1)), 0) yyyy_0 FROM (SELECT DISTINCT item, yyyy FROM t WHERE yyyy >= TO_CHAR(TO_CHAR(sysdate, 'yyyy') - 9) AND yyyy <= TO_CHAR(sysdate, 'yyyy') ) GROUP BY item ;
SELECT B.YYYY,A.ITEM, NVL(SUM(A.QTY),0) QTY FROM ( SELECT '2012' YYYY, 'A' ITEM, 1 AS QTY FROM DUAL UNION ALL SELECT '2010' YYYY, 'B' ITEM, 3 AS QTY FROM DUAL UNION ALL SELECT '2011' YYYY, 'B' ITEM, 2 AS QTY FROM DUAL ) A, ( select TO_CHAR(SYSDATE,'YYYY')+1 - lv AS YYYY from (select level lv from dual connect by level <= 10) ) B WHERE 1=1 AND B.YYYY = A.YYYY(+) GROUP BY B.YYYY,A.ITEM ;