求大神赐予一条SQL
在oracle数据库中
DYEARMONTHPK_CORPCWAREHOUSEIDCCALBODYIDCINVENTORYIDSUM(DATEIN_NUM)SUM(QIMO_NUM)
2012-0110021002F8100000000003ZA1002F81000000000002T0001A210000000008K1600
2012-0210021002F8100000000003ZA1002F81000000000002T0001A210000000008K1600
2012-0310021002F8100000000003ZA1002F81000000000002T0001A210000000008K1600
2012-0410021002F8100000000003ZA1002F81000000000002T0001A210000000008K1610070
2012-0510021002F8100000000003ZA1002F81000000000002T0001A210000000008K16045
2012-0610021002F8100000000003ZA1002F81000000000002T0001A210000000008K16035
2012-0710021002F8100000000003ZA1002F81000000000002T0001A210000000008K16100107
2012-0810021002F8100000000003ZA1002F81000000000002T0001A210000000008K160104
2012-0910021002F8100000000003ZA1002F81000000000002T0001A210000000008K16067
2012-1010021002F8100000000003ZA1002F81000000000002T0001A210000000008K16040
2012-1110021002F8100000000003ZA1002F81000000000002T0001A210000000008K16023
2012-1210021002F8100000000003ZA1002F81000000000002T0001A210000000008K16100114
有数据是这样
现在通过出来的数据的最后一个SUM(QIMO_NUM)来进行判断,如上面的数据,即是114
判断的顺序必须从下往上,即从12月开始判断
当114>12月的SUM(DATEIN_NUM)时,即114>100,则12月的值是100,并将114-100=14作为下面判断
接着进行11月判断,14>0,则11月的值是0,并将14-0-14作为下面判断
到7月的时候14<7月的SUM(DATEIN_NUM),即14<100,则7月等于14,当出现这个情况的时候,后面的月份无需在进行判断,直接取0
则最后出的结果是:
12月 100
11月 0
10月 0
9月 0
8月 0
7月 14
6月 0
。。。
现在假色 12月的SUM(QIMO_NUM)不是114,是250的话
那么出来的结果就是
12月 100
11月 0
10月 0
9月 0
8月 0
7月 100
6月 0
5月 0
4月 50
3月 0
2月 0
1月 0
。。。
求大神赐予一条SQL或者存储过程,谢谢了
大概这个意思
数据库 oracle
[解决办法]
with t as (
select '2012-01' mon, 0 val,23 val2 from dual union all
select '2012-02' mon, 0 val,63 val2 from dual union all
select '2012-03' mon, 0 val,12 val2 from dual union all
select '2012-04' mon, 100 val,46 val2 from dual union all
select '2012-05' mon, 0 val,23 val2 from dual union all
select '2012-06' mon, 0 val,44 val2 from dual union all
select '2012-07' mon, 100 val,3 val2 from dual union all
select '2012-08' mon, 0 val,34 val2 from dual union all
select '2012-09' mon, 0 val,4 val2 from dual union all
select '2012-10' mon, 0 val,23 val2 from dual union all
select '2012-11' mon, 0 val,546 val2 from dual union all
select '2012-12' mon, 100 val,250 val2 from dual
),t1 as (
select t.* from t order by 1 desc
),t2 as (
select t1.* ,rownum rn from t1
),t3 as (
select tt.*
,(select val2 from t2 where rn=1)-(select sum(val) from t2 where rn<=tt.rn) diff
from t2 tt
)
select
to_char(to_date(mon,'YYYY-MM'),'Month') 月
,case when diff>=0 then val when val+diff>=0 then val+diff else 0 end rst
from t3
求大神赏赐一条SQL
求大神赐予一条SQL在oracle数据库中DYEARMONTHPK_CORPCWAREHOUSEIDCCALBODYIDCINVENTORYIDSUM(DATEIN_NUM)
