如何使用SQL状态计算每个订单号金额和总金额
Order_no Status Amount
9008258656 P 50.00
9008258656 P 0.00
9008510713 P 50.00
9008510713 P 0.00
答案 0 :(得分:1)
好吧,看来您需要一个简单的汇总查询:
SELECT order_no, count(*) number_of_orders, sum(amount) total_amount
FROM orders
GROUP BY order_no
如果您需要根据特定状态进行过滤:
SELECT order_no, count(*) number_of_orders, sum(amount) total_amount
FROM orders
WHERE status = 'P'
GROUP BY order_no
答案 1 :(得分:1)
如果您希望保留自己的行号(即4条记录)而没有汇总(即2条记录),则可以使用求和窗口功能。
SELECT ord.Order_no
, ord.Status
, ord.Amount
, TotalSum = SUM(ord.Amount)OVER(PARTITION BY ord.Order_no, ord.Status)
FROM Orders ord
这将产生以下结果:
Order_no Status Amount TotalAmount
9008258656 P 50.00 50.00
9008258656 P 0.00 50.00
9008510713 P 50.00 50.00
9008510713 P 0.00 50.00
根据您提供的示例,在这种情况下进行求和可能没有太大价值。 @GMB的回复就足够了。但是,使用求和窗口功能可以执行很多很酷的操作,例如运行总计。例如,如果您有一个订单日期列,则可以在PARTITION BY ord.Order_no, ord.Status ORDER BY ord.Order_date
之后加上,这将为您提供每个订单递增的金额的连续总和。即:
Order_no Order_date Status Amount RunningTotal
9008258656 1/2/2019 P 50.00 50.00
9008258656 1/3/2019 P 0.00 50.00
9008258656 1/4/2019 P 50.00 100.00
9008258656 1/5/2019 P 0.00 100.00