问题描述
我有运行总计以帮助Office计算选项的总存储成本,但是对于所有存储成本,我们的总最低价值为$ 200.00,是否有一种方法可以使“运行总金额”的最终值最小? >
这是我的代码:
SELECT
o.order_no,d.item_no,d.[desc],i.u_storage,SUM (I.U_STORAGE) OVER (ORDER BY D.SEQ_NO) AS RunningTotal
FROM
ordhdr o
INNER JOIN
orddet d ON o.order_no = d.order_no
INNER JOIN
item i ON i.item_no = d.item_no
WHERE
o.order_no = 'q160542'
AND i.u_storage > 0
ORDER BY
d.seq_no
这是我当前的输出,我希望最终数量153.00跳到200.00
order_no item_no desc u_storage RunningTotal
Q160542 ECONTAINERBIN Container Bin w/lid 31.50 31.50
Q160542 ECONTAINERBIN Container Bin w/lid 31.50 63.00
Q160542 ELED-36WRMUC LED 36"" Sierra 37.50 100.50
Q160542 ELED-SM50 LED SNowman Insta 52.50 153.00
解决方法
您将需要使用条件表达式(如果数据库支持,则为greatest()
)
select o.order_no,d.item_no,d.[desc],i.u_storage,(case when sum(I.U_STORAGE) over (order by D.SEQ_NO) < 200 and
max(d.seq_no) over () = d.seqno
then 200
else sum(I.U_STORAGE) over (order by D.SEQ_NO)
end) AS RunningTotal
from ordhdr o inner join
orddet d
on o.order_no = d.order_no inner join
item i
on i.item_no = d.item_no
where o.order_no = 'q160542' and
i.u_storage > 0
order by d.seq_no