200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > oracle先进先出法 怎样能过SQL计算先进先出库龄分析?

oracle先进先出法 怎样能过SQL计算先进先出库龄分析?

时间:2021-04-26 21:45:51

相关推荐

oracle先进先出法 怎样能过SQL计算先进先出库龄分析?

记得提供建表脚本和测试数据:

/thread-1348543-1-1.html

create table t_deposit

(

name varchar2(10),

amount number,

d_date date

);

with t as (select name, amount, trunc(sysdate-d_date) days from t_deposit)

select name,

sum(d0to30) as d0to30,

sum(d30to90) as d30to90,

sum(d90to120) as d90to120,

sum(d120to0) as d120to0

from

(

select name,

case when days<=30 then amount else 0 end as d0to30,

case when days>30 and days <=90 then amount else 0 end as d30to90,

case when days>90 and days <=120 then amount else 0 end as d90to120,

case when days>120 then amount else 0 end as d120to0

from t

)group by name;

insert into t_deposit (d_date, name, amount)

values (to_date('-01-10','YYYY-MM-DD'), 'A', 100);

insert into t_deposit(d_date, name, amount)

values (to_date('-02-18','YYYY-MM-DD'), 'A', 200);

insert into t_deposit(d_date, name, amount)

values (to_date('-03-18','YYYY-MM-DD'), 'A', 200);

insert into t_deposit(d_date, name, amount)

values (to_date('-04-18','YYYY-MM-DD'), 'A', 200);

insert into t_deposit(d_date, name, amount)

values (to_date('-04-30','YYYY-MM-DD'), 'A', 280);

with t as (select name, amount, trunc(sysdate-d_date) days from t_deposit)

select name,

sum(d0to30) as d0to30,

sum(d30to90) as d30to90,

sum(d90to120) as d90to120,

sum(d120to0) as d120to0

from

(

select name,

case when days<=30 then amount else 0 end as d0to30,

case when days>30 and days <=90 then amount else 0 end as d30to90,

case when days>90 and days <=120 then amount else 0 end as d90to120,

case when days>120 then amount else 0 end as d120to0

from t

)group by name;

[本帖最后由 guostong 于 -7-15 05:25 编辑]

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。