我有如下 SQL 表:
| 采購訂單 | 交貨型別 | Scheduled_Line_Item | 日期 | 數量 |
|---|---|---|---|---|
| 100 | 預定交貨 | 01 | 01/12/2021 | 100,000 |
| 100 | 預定交貨 | 02 | 07/12/2021 | 75,000 |
| 100 | 實際交付 | 空值 | 03/12/2021 | 50,000 |
| 100 | 實際交付 | 空值 | 12/12/2021 | 50,000 |
| 100 | 實際交付 | 空值 | 15/12/2021 | 20,000 |
| 100 | 實際交付 | 空值 | 31/12/2021 | 55,000 |
我試圖根據交貨日期的順序將實際交貨專案映射到特定的 Scheduled_Line_Item,以產生如下結果:
| 采購訂單 | 交貨型別 | Scheduled_Line_Item | 日期 | 已交付_數量 | 預定數量 |
|---|---|---|---|---|---|
| 100 | 實際交付 | 01 | 03/12/2021 | 50,000 | 100,000 |
| 100 | 實際交付 | 01 | 12/12/2021 | 50,000 | 100,000 |
| 100 | 實際交付 | 02 | 15/12/2021 | 20,000 | 75,000 |
| 100 | 實際交付 | 02 | 31/12/2021 | 55,000 | 75,000 |
從上面可以看出,前兩行被映射到“Scheduled_Line_Item”“01”,因為 Date 的序列已經完成了 Scheduled Delivery 中數量的前 100,000。一旦“實際交付”完成了第一個“計劃交付”,那么只有我們移動到下一個“計劃交付”,這就是為什么接下來的兩行被映射到“Scheduled_Line_Item”“02”。
我找到了這種方法,但無法將其應用于我的要求https://sqlsunday.com/2019/09/16/calculating-invoice-settlements/。
uj5u.com熱心網友回復:
假設PO Date對于“實際交付”是唯一的,您可以匹配不包括重復行的運行總計
with sd as (
select *, sum(Quantity) over(partition by PO order by date) s
from tbl
where Delivery_Type ='Scheduled Delivery'
),
ad as (
select *, sum(Quantity) over(partition by PO order by date) s
from tbl
where Delivery_Type ='Actual Delivery'
)
select top(1) with ties sd.*, ad.*
from sd
left join ad on ad.PO=sd.PO and sd.s>= ad.s
order by row_number() over(partition by ad.PO, ad.Date order by sd.date)
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/381372.html
標籤:sql sql-server 自加入
