两列中具有重复值的全联接

问题描述 投票:0回答:1

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

sMinMax:

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

vsStock:

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

我想加入他们,所以我得到了一个表格,该表格将所有parNo碱基的所有列显示在一起,如下所示:

结果:

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相同的结果。有人知道我在做什么错吗?

sql join left-join where-clause outer-join
1个回答
0
投票

您可以尝试以下操作:

SELECT a.PartNo, a.baseID, MIN(a.MinQty) AS MinQty, MIN(a.MaxQty) AS MaxQty, SUM(b.Qty)
FROM sMinMax a INNER JOIN vsStock b ON a.PartNo = b.PartNo AND a.baseID = b.baseID
GROUP BY a.PartNo, a.baseID
UNION ALL
SELECT c.PartNo, c.baseID, NULL, NULL, c.Qty 
FROM vsStock c
WHERE NOT EXISTS (
  SELECT 1 FROM sMinMax d WHERE c.PartNo = d.PartNo AND c.baseID = d.baseID
)
© www.soinside.com 2019 - 2024. All rights reserved.