各位好,现在遇到一个棘手的SQL查询结果列之间的问题,具体如下:
查询结果为五列,需要将 第五列(即下文的 总回款)从 倒数第四列开始 逐个列进行 扣减,直到将 最后一列减为0,将最后扣减的结果进行展示。
原始查询结果:
销售阶段一 销售阶段二 销售阶段三 销售阶段四 总回款
100 200 300 600 800
100 200 300 200 700
希望的结果:
销售阶段一 销售阶段二 销售阶段三 销售阶段四 总回款
100 200 100 0 0
100 0 0 0 0
得出结果的过程就是:用 【总回款】这一列 逐步的向 销售阶段四→销售阶段三→销售阶段二→销售阶段一,这样的顺序扣减,直至 总回款全部扣减为0
请问该如何实现?
------解决方案--------------------
- SQL code
with t1 as( select 100 c1,200 c2,300 c3,600 c4,800 c5 from dual union all select 100 c1,200 c2,300 c3,200 c4,700 c5 from dual)select case when c5-c4-c3-c2 <= 0 then c1 else decode(sign(c1+c2+c3+c4-c5),1,c1+c2+c3+c4-c5,0) end c1, case when c5-c4-c3 <= 0 then c2 else decode(sign(c2+c3+c4-c5),1,c2+c3+c4-c5,0) end c2, case when c5-c4 <= 0 then c3 else decode(sign(c3+c4-c5),1,c3+c4-c5,0) end c3, case when c5-c4 <= 0 then c4 else decode(sign(c4-c5),1,c4-c5,0) end c4, case when c5-c4-c3-c2-c1 <= 0 then 0 else decode(sign(c5-c4-c3-c2-c1),1,c5-c4-c3-c2-c1,0) end c5from t1 c1 c2 c3 c4 c5-----------------------------------------------1 100 200 100 0 02 100 0 0 0 0