sql - 完全连接具有重复值的两列
问题描述
我有两个看起来像这样的表:
最小最大:
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 相同的结果。有人知道我做错了什么吗?
解决方案
类似的东西?此查询给了我与您预期相同的结果。
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
推荐阅读
- javascript - 带有许多专辑的 Bootstrap 灯箱库
- python - 使用 Python 子进程时,为什么 Ctrl-C 不会产生与 kill -2 相同的行为?
- html - 如何覆盖被其他类/元素深度嵌套的元素样式?
- arrays - 如何在 Swift 中设置数组
- javascript - 在plotly js中更改z索引标签
- linked-list - 链表声明中的比较器
- c++ - 强制在编译时编译一个 constexpr 函数,即使里面的计算包含一个非常量数组,通过使返回的 obj 成为常量?
- python - 重新安装 Anaconda:导入旧环境
- python - Apache Beam Python SDK 版本上的 Wait.On()
- html - 当我开始在输入区域输入值时,函数立即触发