Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>I'm assuming <code>valid_from</code>/<code>valid_to</code> never spans multiple years; i.e., <code>TO_DATE(valid_from,'YYYY')</code> always <code>= TO_DATE(valid_to,'YYYY')</code>.</p> <pre><code>SQL&gt; CREATE TABLE source ( 2 bid VARCHAR2(5) 3 , valid_from DATE 4 , valid_to DATE 5 , qty NUMBER 6 ); Table created. SQL&gt; INSERT INTO source VALUES ('00001',TO_DATE('20010201','YYYYMMDD'),TO_DATE('20010630','YYYYMMDD'),132); 1 row created. SQL&gt; INSERT INTO source VALUES ('00002',TO_DATE('20020301','YYYYMMDD'),TO_DATE('20021231','YYYYMMDD'),59); 1 row created. SQL&gt; CREATE TABLE destination ( 2 bid VARCHAR2(5) 3 , jan NUMBER 4 , feb NUMBER 5 , mar NUMBER 6 , apr NUMBER 7 , may NUMBER 8 , jun NUMBER 9 , jul NUMBER 10 , aug NUMBER 11 , sep NUMBER 12 , oct NUMBER 13 , nov NUMBER 14 , dec NUMBER 15 ); Table created. SQL&gt; COLUMN jan FORMAT 999 SQL&gt; COLUMN feb FORMAT 999 SQL&gt; COLUMN mar FORMAT 999 SQL&gt; COLUMN apr FORMAT 999 SQL&gt; COLUMN may FORMAT 999 SQL&gt; COLUMN jun FORMAT 999 SQL&gt; COLUMN jul FORMAT 999 SQL&gt; COLUMN aug FORMAT 999 SQL&gt; COLUMN sep FORMAT 999 SQL&gt; COLUMN oct FORMAT 999 SQL&gt; COLUMN nov FORMAT 999 SQL&gt; COLUMN dec FORMAT 999 SQL&gt; INSERT INTO destination 2 SELECT bid 3 , NVL(MAX(DECODE(r,01,split_qty)),0) jan 4 , NVL(MAX(DECODE(r,02,split_qty)),0) feb 5 , NVL(MAX(DECODE(r,03,split_qty)),0) mar 6 , NVL(MAX(DECODE(r,04,split_qty)),0) apr 7 , NVL(MAX(DECODE(r,05,split_qty)),0) may 8 , NVL(MAX(DECODE(r,06,split_qty)),0) jun 9 , NVL(MAX(DECODE(r,07,split_qty)),0) jul 10 , NVL(MAX(DECODE(r,08,split_qty)),0) aug 11 , NVL(MAX(DECODE(r,09,split_qty)),0) sep 12 , NVL(MAX(DECODE(r,10,split_qty)),0) oct 13 , NVL(MAX(DECODE(r,11,split_qty)),0) nov 14 , NVL(MAX(DECODE(r,12,split_qty)),0) dec 15 FROM 16 ( 17 SELECT x.bid 18 , x.month_abbr 19 , x.r 20 , x.rn 21 , x.total_months 22 , x.qty 23 , FLOOR(x.qty / x.total_months) 24 + DECODE(x.rn 25 , x.total_months, MOD(x.qty, x.total_months) 26 , 0) split_qty 27 FROM (SELECT s.bid 28 , months.r 29 , ROW_NUMBER() 30 OVER (PARTITION BY s.bid 31 ORDER BY months.r) rn 32 , COUNT(*) 33 OVER (PARTITION BY s.bid) total_months 34 , s.qty 35 FROM (SELECT ROWNUM r 36 FROM DUAL 37 CONNECT BY LEVEL &lt;= 12) months 38 , source s 39 WHERE TO_CHAR(s.valid_from,'YYYY') = TO_CHAR(s.valid_to,'YYYY') 40 AND months.r BETWEEN TO_NUMBER(TO_CHAR(s.valid_from,'MM')) 41 AND TO_NUMBER(TO_CHAR(s.valid_to,'MM'))) x 42 ) 43 GROUP BY bid 44 ; 2 rows created. SQL&gt; SELECT * 2 FROM destination 3 ; BID JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC ----- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- 00001 0 26 26 26 26 28 0 0 0 0 0 0 00002 0 0 5 5 5 5 5 5 5 5 5 14 SQL&gt; </code></pre>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
    3. VO
      singulars
      1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload