我们使用的是 SQL Server 2016 和 2019
我有一个数据集,我正在汇总父/子关系。我这样做是因为某些父行将返回SalesValue
0,而它们的子行将返回我们正在寻找的值。
这是我的查询:
SELECT ART.StockCode
, BOM.Component
, ART.QtyInvoiced
, ART.Invoice
, ART.SalesValue
, ART2.SalesValue
FROM TABLE1 ART
JOIN TABLE2 IM
ON IM.StockCode = ART.StockCode
LEFT OUTER JOIN TABLE3 BOM
ON BOM.ParentPart = ART.StockCode
AND IM.KitType = 'K'
LEFT OUTER JOIN TABLE4 ART2
ON ART2.StockCode = BOM.Component
AND ART2.Invoice = ART.Invoice
以及它返回的数据
StockCode Component QtyInvoiced Invoice SalesValue SalesValue2
315128 NULL 1.000000 1 154.32 NULL
317324 NULL 1.000000 1 68.31 NULL
317350 NULL 1.000000 1 428.90 NULL
318482 NULL 1.000000 1 171.24 NULL
320058 NULL 1.000000 1 28.58 NULL
320058 NULL 1.000000 1 28.58 NULL
320058 NULL 1.000000 1 28.58 NULL
900550 NULL 1.000000 1 2396.08 NULL
900572 NULL 1.000000 1 1448.84 NULL
900581 NULL 1.000000 1 2017.96 NULL
901012 900581 1.000000 1 0.00 2017.96
901012 317350 1.000000 1 0.00 428.90
901012 317324 1.000000 1 0.00 68.31
901062 900572 1.000000 1 0.00 1448.84
901062 318482 1.000000 1 0.00 171.24
我想要做的是排除任何StockCode
在Component
字段中具有相同Invoice
数字的值
在上面的示例中,我们希望排除股票代码 900581、317350、317324、900572 和 318482,因为它们已经存在于该Component
领域。
这就是我想要的:
StockCode Component QtyInvoiced Invoice SalesValue SalesValue2
315128 NULL 1.000000 1 154.32 NULL
320058 NULL 1.000000 1 28.58 NULL
320058 NULL 1.000000 1 28.58 NULL
320058 NULL 1.000000 1 28.58 NULL
900550 NULL 1.000000 1 2396.08 NULL
901012 900581 1.000000 1 0.00 2017.96
901012 317350 1.000000 1 0.00 428.90
901012 317324 1.000000 1 0.00 68.31
901062 900572 1.000000 1 0.00 1448.84
901062 318482 1.000000 1 0.00 171.24
这通过将原始查询包装到 CTE 中来工作,然后仅在没有其他行的 Component 列等于 StockCode 列的情况下从它返回行。