所以我有一個發貨清單,我有訂單總額和每個發貨的總額,但我很難想出代碼來為累積發貨創建一個額外的列,其中包括當前發貨,加上該訂單的所有先前發貨。這是我到目前為止的結果:
OrderNo |ShipDate |OrderTotal |Shipment Total |Cumulative Shipments |Rank
22396 |2022-04-04 |639,964 |2,983 |639,966 |3
22396 |2022-03-31 |639,964 |5,626 |639,966 |2
22396 |2022-02-24 |639,964 |631,355 |639,966 |1
因此,這些是同一訂單的 3 次單獨裝運。第 3 行中的第一次發貨是正確的,但我需要第 2 行的累積發貨列作為兩者的發貨總和,即 $631,555 5,626。按照同樣的邏輯,第 1 行應該是所有 3 行的總和,此時將等于訂單總額 639,964 美元。這就是它的樣子:
OrderNo |ShipDate |OrderTotal |Shipment Total |Cumulative Shipments |Rank
22396 |2022-04-04 |639,964 |2,983 |639,964 |3
22396 |2022-03-31 |639,964 |5,626 |636,981 |2
22396 |2022-02-24 |639,964 |631,355 |631,355 |1
我假設完成此操作的最佳方法是使用 over(partition by ()),但我正在努力想出代碼。這是我到目前為止所擁有的:
SELECT
OrderNo,
ShipDate,
OrderTotal,
[Shipment Total],
SUM([Shipment Total]) OVER(PARTITION BY OrderNo) AS [Cumulative Shipments],
[Rank]
FROM Shipments
WHERE OrderNo = '22396'
[Rank] 列來自較早的 CTE,它根據shipdate 計算該貨物的排名:
ROW_NUMBER() OVER(PARTITION BY d.OrderNo ORDER BY d.ShipDate) AS [Rank]
我需要類似 SUM([Shipment Total]) 的東西,其中排名等于或小于當前排名。我確定可以使用日期列完成相同的操作,但不確定如何完成查詢
uj5u.com熱心網友回復:
您似乎已經完成了一半,只是缺少功能累積總和的排序標準,例如
select *,
Sum(ShipmentTotal)
over(partition by OrderNo
order by ShipDate rows between unbounded preceding and current row)
from Shipments;
uj5u.com熱心網友回復:
我沒有費心構建 CTE,但假設您有一些 PK,您可以自行加入:
SELECT s.ShipmentsID, SUM(cumulative.ShipmentTotal) AS Sum
FROM Shipments s
LEFT JOIN Shipments cumulative ON cumulative.ShipDate <= s.ShipDate
GROUP BY s.ShipmentsID
| 貨件編號 | 和 |
|---|---|
| 1 | 631355.52 |
| 2 | 636982.29 |
| 3 | 639966.04 |
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/457451.html
