我数据表中计划是按月存的,我想拆分到每一天,怎么写?
月ID    单位ID   类型1  计划量
201110  1        1      300
我想拆分后得到日          单位ID   类型1  计划量
20111001    1        1      300/31
20111002    1        1      300/31

解决方案 »

  1.   


    with tbl as
    (
        select '201102' as smonth, 1 as iid, 1 as itype, 560 as icount from dual
         union all
        select '201110' as smonth, 2 as iid, 2 as itype, 310 as icount from dual
    )
    select smonth || sday as sdate, iid, itype,
           icount / to_number(smaxday) as icount
      from (select tbl.*, to_char(last_day(to_date(smonth, 'yyyymm')),'dd') as smaxday 
              from tbl) t1,
           (select lpad(to_char(rownum), 2, '0') as sday from dual
            connect by rownum <= 31) t2
     where t1.smaxday >= t2.sday
     order by sdate;
      

  2.   

    1楼月份的天数计算有误!
    SQL> WITH tb AS (
      2  SELECT 201102 month_id,0 company_id,0 type_id,500 plan_amount FROM DUAL UNION ALL
      3  SELECT 201110 month_id,1 company_id,1 type_id,300 plan_amount FROM DUAL UNION ALL
      4  SELECT 201111 month_id,2 company_id,2 type_id,600 plan_amount FROM DUAL
      5  )
      6  SELECT TO_DATE(t1.month_id, 'yyyymm') + t2.rn - 1 every_day,
      7         t1.company_id,
      8         t1.type_id,
      9         plan_amount / (LAST_DAY(TO_DATE(t1.month_id, 'yyyymm')) -
     10         TO_DATE(t1.month_id, 'yyyymm')) avg_amount
     11    FROM tb t1,
     12         (SELECT ROWNUM rn,
     13                 lastday
     14            FROM (SELECT MAX(LAST_DAY(TO_DATE(tb.month_id, 'yyyymm')) -
     15                             TO_DATE(tb.month_id, 'yyyymm')) + 1 lastday
     16                    FROM tb)
     17          CONNECT BY ROWNUM <= lastday) t2
     18   WHERE LAST_DAY(TO_DATE(t1.month_id, 'yyyymm')) >=
     19         TO_DATE(t1.month_id, 'yyyymm') + t2.rn - 1
     20   ORDER BY t1.month_id,
     21            t2.rn
     22  ;EVERY_DAY   COMPANY_ID    TYPE_ID AVG_AMOUNT
    ----------- ---------- ---------- ----------
    2011/02/01           0          0 18.5185185
    2011/02/02           0          0 18.5185185
    2011/02/03           0          0 18.5185185
    2011/02/04           0          0 18.5185185
    2011/02/05           0          0 18.5185185
    2011/02/06           0          0 18.5185185
    2011/02/07           0          0 18.5185185
    2011/02/08           0          0 18.5185185
    2011/02/09           0          0 18.5185185
    2011/02/10           0          0 18.5185185
    2011/02/11           0          0 18.5185185
    2011/02/12           0          0 18.5185185
    2011/02/13           0          0 18.5185185
    2011/02/14           0          0 18.5185185
    2011/02/15           0          0 18.5185185
    2011/02/16           0          0 18.5185185
    2011/02/17           0          0 18.5185185
    2011/02/18           0          0 18.5185185
    2011/02/19           0          0 18.5185185
    2011/02/20           0          0 18.5185185EVERY_DAY   COMPANY_ID    TYPE_ID AVG_AMOUNT
    ----------- ---------- ---------- ----------
    2011/02/21           0          0 18.5185185
    2011/02/22           0          0 18.5185185
    2011/02/23           0          0 18.5185185
    2011/02/24           0          0 18.5185185
    2011/02/25           0          0 18.5185185
    2011/02/26           0          0 18.5185185
    2011/02/27           0          0 18.5185185
    2011/02/28           0          0 18.5185185
    2011/10/01           1          1         10
    2011/10/02           1          1         10
    2011/10/03           1          1         10
    2011/10/04           1          1         10
    2011/10/05           1          1         10
    2011/10/06           1          1         10
    2011/10/07           1          1         10
    2011/10/08           1          1         10
    2011/10/09           1          1         10
    2011/10/10           1          1         10
    2011/10/11           1          1         10
    2011/10/12           1          1         10
    2011/10/13           1          1         10EVERY_DAY   COMPANY_ID    TYPE_ID AVG_AMOUNT
    ----------- ---------- ---------- ----------
    2011/10/14           1          1         10
    2011/10/15           1          1         10
    2011/10/16           1          1         10
    2011/10/17           1          1         10
    2011/10/18           1          1         10
    2011/10/19           1          1         10
    2011/10/20           1          1         10
    2011/10/21           1          1         10
    2011/10/22           1          1         10
    2011/10/23           1          1         10
    2011/10/24           1          1         10
    2011/10/25           1          1         10
    2011/10/26           1          1         10
    2011/10/27           1          1         10
    2011/10/28           1          1         10
    2011/10/29           1          1         10
    2011/10/30           1          1         10
    2011/10/31           1          1         10
    2011/11/01           2          2 20.6896551
    2011/11/02           2          2 20.6896551
    2011/11/03           2          2 20.6896551EVERY_DAY   COMPANY_ID    TYPE_ID AVG_AMOUNT
    ----------- ---------- ---------- ----------
    2011/11/04           2          2 20.6896551
    2011/11/05           2          2 20.6896551
    2011/11/06           2          2 20.6896551
    2011/11/07           2          2 20.6896551
    2011/11/08           2          2 20.6896551
    2011/11/09           2          2 20.6896551
    2011/11/10           2          2 20.6896551
    2011/11/11           2          2 20.6896551
    2011/11/12           2          2 20.6896551
    2011/11/13           2          2 20.6896551
    2011/11/14           2          2 20.6896551
    2011/11/15           2          2 20.6896551
    2011/11/16           2          2 20.6896551
    2011/11/17           2          2 20.6896551
    2011/11/18           2          2 20.6896551
    2011/11/19           2          2 20.6896551
    2011/11/20           2          2 20.6896551
    2011/11/21           2          2 20.6896551
    2011/11/22           2          2 20.6896551
    2011/11/23           2          2 20.6896551
    2011/11/24           2          2 20.6896551EVERY_DAY   COMPANY_ID    TYPE_ID AVG_AMOUNT
    ----------- ---------- ---------- ----------
    2011/11/25           2          2 20.6896551
    2011/11/26           2          2 20.6896551
    2011/11/27           2          2 20.6896551
    2011/11/28           2          2 20.6896551
    2011/11/29           2          2 20.6896551
    2011/11/30           2          2 20.689655189 rows selected
      

  3.   

    你谦虚点!!你的结果:
    SQL> with tbl as
      2  (
      3      select '201102' as smonth, 1 as iid, 1 as itype, 560 as icount from dual
      4       union all
      5      select '201110' as smonth, 2 as iid, 2 as itype, 310 as icount from dual
      6  )
      7  select smonth || sday as sdate, iid, itype,
      8         icount / to_number(smaxday) as icount
      9    from (select tbl.*, to_char(last_day(to_date(smonth, 'yyyymm')),'dd') as smaxday
     10            from tbl) t1,
     11         (select lpad(to_char(rownum), 2, '0') as sday from dual
     12          connect by rownum <= 31) t2
     13   where t1.smaxday >= t2.sday
     14   order by sdate;SDATE                 IID      ITYPE     ICOUNT
    -------------- ---------- ---------- ----------
    20110201                1          1         20
    20110202                1          1         20
    20110203                1          1         20
    20110204                1          1         20
    20110205                1          1         20
    20110206                1          1         20
    20110207                1          1         20
    20110208                1          1         20
    20110209                1          1         20
    20110210                1          1         20
    20110211                1          1         20
    20110212                1          1         20
    20110213                1          1         20
    20110214                1          1         20
    20110215                1          1         20
    20110216                1          1         20
    20110217                1          1         20
    20110218                1          1         20
    20110219                1          1         20
    20110220                1          1         20SDATE                 IID      ITYPE     ICOUNT
    -------------- ---------- ---------- ----------
    20110221                1          1         20
    20110222                1          1         20
    20110223                1          1         20
    20110224                1          1         20
    20110225                1          1         20
    20110226                1          1         20
    20110227                1          1         20
    20110228                1          1         20
    20111001                2          2         10
    20111002                2          2         10
    20111003                2          2         10
    20111004                2          2         10
    20111005                2          2         10
    20111006                2          2         10
    20111007                2          2         10
    20111008                2          2         10
    20111009                2          2         10
    20111010                2          2         10
    20111011                2          2         10
    20111012                2          2         10
    20111013                2          2         10SDATE                 IID      ITYPE     ICOUNT
    -------------- ---------- ---------- ----------
    20111014                2          2         10
    20111015                2          2         10
    20111016                2          2         10
    20111017                2          2         10
    20111018                2          2         10
    20111019                2          2         10
    20111020                2          2         10
    20111021                2          2         10
    20111022                2          2         10
    20111023                2          2         10
    20111024                2          2         10
    20111025                2          2         10
    20111026                2          2         10
    20111027                2          2         10
    20111028                2          2         10
    20111029                2          2         10
    20111030                2          2         10
    20111031                2          2         1059 rows selected
    11月有31号?????