SQL Server Management Studio,可以使用“运行总计”将最终值覆盖到最小数量

问题描述

我有运行总计以帮助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