我正在使用两个表:
tblOrders
| Part | Order |
|:----:|:-----:|
| AXXA | 10122 |
| AXXA | 10125 |
| AXXB | 10244 |
| AXXB | 10254 |
| AXXB | 10259 |
和tblPO
| rOrder | PONum | PODate |
|:------:|:-------:|:----------:|
| 10122 | PO99283 | 2/6/2020 |
| 10125 | PO99283 | 2/6/2020 |
| 10244 | PO99455 | 3/22/2020 |
| 10244 | PO99456 | 3/11/2020 |
| 10254 | PO99019 | 1/22/2020 |
| 10259 | PO99122 | 12/22/2020 |
| 10259 | PO99122 | 1/2/2021 |
我正在尝试合并这两个表,并且对于每个订单,请选择最早到达日期的PO(如果有多个)。
因此,对于订单号10244
,它具有两个PO,PO99455
并且PO99456
。我想要PO99456
关联,因为它的日期03/11/2020
早于PO99455
的日期03/22/2020
。
理想的结果数据集如下所示:
| PartNum | OrderNum | PONum | PODate |
|:-------:|:--------:|:-------:|:----------:|
| AXXA | 10122 | PO99283 | 2/6/2020 |
| AXXA | 10125 | PO99283 | 2/6/2020 |
| AXXB | 10244 | PO99456 | 3/11/2020 |
| AXXB | 10254 | PO99019 | 1/22/2020 |
| AXXB | 10259 | PO99122 | 12/22/2020 |
目前,我已经写了:
SELECT
a.PartNum,
a.OrderNum,
b.PONum,
MAX(b.PODate) AS PODate
FROM
tblOrders a
LEFT JOIN tblPOs b ON a.OrderNum = b.rOrderNum
GROUP BY
a.PartNum,
a.OrderNum,
b.PONum
产生:
PartNum OrderNum PONum PODate
AXXA 10122 PO99283 2020-02-05
AXXA 10125 PO99283 2020-02-05
AXXB 10244 PO99455 2020-03-21
AXXB 10244 PO99456 2020-03-10
AXXB 10254 PO99019 2020-01-21
AXXB 10259 PO99122 2021-01-01
我已经使用此演示设置了SQL FIDDLE。如何更改查询以获得所需的结果?
用途OUTER APPLY
:
SELECT o.*, po.*
FROM tblOrders o OUTER APPLY
(SELECT TOP (1) po.*
FROM tblPOs p
WHERE p.OrderNum = o.rOrderNum
ORDER BY PODate ASC
) po
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句