计算列数并获得总订单号?

时间:2019-01-08 00:20:40

标签: sql sql-server

如何使用SQL状态计算每个订单号金额和总金额

Order_no    Status Amount
9008258656  P      50.00
9008258656  P      0.00
9008510713  P      50.00
9008510713  P      0.00

2 个答案:

答案 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