首页 > 解决方案 > 完全连接具有重复值的两列

问题描述

我有两个看起来像这样的表:

最小最大:

PartNo  baseID  Min   Max  
11795   1       1     1
11795   5       0     0
11795   6       1     1
01655   65      2     3 

库存:

PartNo  baseID  Qty
11795   1       1
11795   1       1
11795   55      1

我想加入他们,所以我得到一个表格,其中显示了所有 parNo en 基的所有列,如下所示:

结果:

PartNo  baseID  Min   Max  Qty
11795   1       1     1     2
11795   5       0     0     null
11795   6       1     1     null
11795   55      null  null  1
01655   65      2     3     null

因此,我只需在两列上使用完全外连接来执行此操作,但这会产生与左连接所期望的相同结果。我尝试了 1000 件事,但这是我最后一次尝试:

SELECT 
 a.sPart_ID
,a.uRALBase_ID
,a.MinQty
,a.MaxQty
,b.Qty

FROM [RALNHVTST].[dbo].[sMinMax] as a

FULL OUTER JOIN [RALNHVTST].[dbo].[vsStockList] as b

ON a.sPart_ID = b.sPart_ID
AND a.uRALBase_ID = b.uRALBase_ID
WHERE a.sPart_ID IS NOT NULL
AND a.sPart_ID = 1159

ORDER BY a.sPart_ID

但正如我所说,这给了我与 LEFT JOIN 相同的结果。有人知道我做错了什么吗?

标签: sqltsqljoinwhere-clauseouter-join

解决方案


类似的东西?此查询给了我与您预期相同的结果。

SELECT 
 CASE WHEN a.PartNo IS NOT NULL THEN a.PartNo ELSE b.PartNo END AS PartNo
,CASE WHEN a.baseId IS NOT NULL THEN a.baseId ELSE b.baseId END AS baseId
,a.[Min]
,a.[Max]
,SUM(b.Qty) AS Qty

FROM [dbo].[sMinMax] as a

FULL JOIN [dbo].[vsStock] as b

ON a.partNo = b.partNo
AND a.baseId = b.baseId
GROUP BY 
    CASE WHEN a.PartNo IS NOT NULL THEN a.PartNo ELSE b.PartNo END, 
    CASE WHEN a.baseId IS NOT NULL THEN a.baseId ELSE b.baseId END, 
    a.[Min],
    a.[Max]
ORDER BY 
CASE WHEN a.PartNo IS NOT NULL THEN a.PartNo ELSE b.PartNo END

推荐阅读