PART_NO | SUPPLIER | TYPE | CURRENCY | PRICE | START_DATE | END_DATE | |
1 | ABC | S1 | 1 | KRW | 0.0608 | 20130501 | 20130630 |
2 | ABC | S1 | 1 | KRW | 0.0596 | 20130701 | 29991231 |
3 | ABC | S1 | 2 | KRW | 0.0608 | 20130304 | 20130630 |
4 | ABC | S1 | 2 | KRW | 0.0596 | 20130701 | 29991231 |
5 | ABC | S1 | 1 | USD | 0.0097 | 20130304 | 20130430 |
6 | DEF | S2 | 2 | KRW | 0.0005 | 20121204 | 20130330 |
7 | DEF | S2 | 2 | KRW | 0.0004 | 20130401 | 20130420 |
8 | DEF | S2 | 2 | KRW | 0.0003 | 20130421 | 29991231 |
No. | Part No | Supplier | type | Currency | 201212 | 201301 | 201302 | 201303 | 201304 | 201305 | 201306 | 201307 | 201308 | 201309 | 201310 | 201311 | 201312 |
1 | ABC | S1 | 1 | KRW | 0.0608 | 0.0608 | 0.0596 | 0.0596 | 0.0596 | 0.0596 | 0.0596 | ||||||
2 | ABC | S1 | 2 | KRW | 0.0608 | 0.0608 | 0.0608 | 0.0608 | 0.0596 | 0.0596 | 0.0596 | 0.0596 | 0.0596 | ||||
3 | ABC | S1 | 1 | USD | 0.0097 | 0.0097 | |||||||||||
4 | DEF | S2 | 2 | KRW | 0.0005 | 0.0005 | 0.0005 | 0.0005 | 0.0003 | 0.0003 | 0.0003 | 0.0003 | 0.0003 | 0.0003 | 0.0003 | 0.0003 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | -- 억지로 답에만 맞췄어요.. WITH T1 (PART_NO, SUPPLIER, TYPE, CURRENCY, PRICE, START_DATE, END_DATE ) AS ( SELECT 'ABC' , 'S1' , '1' , 'KRW' , '0.0608' , '20130501' , '20130630' FROM DUAL UNION ALL SELECT 'ABC' , 'S1' , '1' , 'KRW' , '0.0596' , '20130701' , '29991231' FROM DUAL UNION ALL SELECT 'ABC' , 'S1' , '2' , 'KRW' , '0.0608' , '20130304' , '20130630' FROM DUAL UNION ALL SELECT 'ABC' , 'S1' , '2' , 'KRW' , '0.0596' , '20130701' , '29991231' FROM DUAL UNION ALL SELECT 'ABC' , 'S1' , '1' , 'USD' , '0.0097' , '20130304' , '20130430' FROM DUAL UNION ALL SELECT 'DEF' , 'S2' , '2' , 'KRW' , '0.0005' , '20121204' , '20130330' FROM DUAL UNION ALL SELECT 'DEF' , 'S2' , '2' , 'KRW' , '0.0004' , '20130401' , '20130420' FROM DUAL UNION ALL SELECT 'DEF' , 'S2' , '2' , 'KRW' , '0.0003' , '20130421' , '29991231' FROM DUAL ),T2 (DT) AS ( SELECT TO_CHAR(ADD_MONTHS(TO_DATE( '201212' , 'YYYYMM' ) , LEVEL - 1 ) , 'YYYYMMDD' ) FROM DUAL CONNECT BY LEVEL <= ( SELECT MONTHS_BETWEEN ( LEAST(TO_CHAR(SYSDATE , 'YYYYMMDD' ), MAX (END_DATE)), MIN (START_DATE)) FROM T1) + 1 ) SELECT PART_NO , SUPPLIER , TYPE , CURRENCY , MAX (DECODE(DT, '20121201' ,PRICE)) "201212" , MAX (DECODE(DT, '20130101' ,PRICE)) "201301" , MAX (DECODE(DT, '20130201' ,PRICE)) "201302" , MAX (DECODE(DT, '20130301' ,PRICE)) "201303" , MAX (DECODE(DT, '20130401' ,PRICE)) "201304" , MAX (DECODE(DT, '20130501' ,PRICE)) "201305" , MAX (DECODE(DT, '20130601' ,PRICE)) "201306" , MAX (DECODE(DT, '20130701' ,PRICE)) "201307" , MAX (DECODE(DT, '20130801' ,PRICE)) "201308" , MAX (DECODE(DT, '20130901' ,PRICE)) "201309" , MAX (DECODE(DT, '20131001' ,PRICE)) "201310" , MAX (DECODE(DT, '20131101' ,PRICE)) "201311" FROM ( SELECT * FROM ( SELECT PART_NO, SUPPLIER, TYPE, CURRENCY, PRICE, SUBSTR(START_DATE,1,6)|| '01' START_DATE, END_DATE , ROW_NUMBER() OVER(PARTITION BY PART_NO , SUPPLIER , TYPE , SUBSTR(START_DATE,1,6) ORDER BY START_DATE DESC ) RN FROM T1 ) WHERE RN = 1) T1 , T2 WHERE T1.START_DATE <= T2.DT(+) AND T1.END_DATE >= T2.DT(+) GROUP BY PART_NO , SUPPLIER , TYPE , CURRENCY ORDER BY PART_NO , SUPPLIER , CURRENCY , TYPE |