在 SQL Server 中合并和转置



我有两个表:

表1

每个订单的SOP编号是唯一的。对于上表,INVO23935是一个订单,INV023937是另一个订单,依此类推。

订单中的每个唯一项目都有自己的行,其中可能有一个或多个项目。对于INVO23935,有三个项目X和一个项目Y。但其他订单可能具有相同的项目。例如,订单 INV023948 有一个项目 X。有数千种不同的项目,并且不断添加新项目。

行列对于订单上的每个行项都是唯一的。对于每个行项目,它递增 16384。 但是,我不需要最终表的行,但我认为创建最终表可能很有用。如果不是,您可以将其删除。

这只是包含数千行的表的快照。

表2

表2 与表 1 有一列不同,即序列号。只有某些项目具有序列号,即使对于同一项目,每个序列号也是唯一的。例如,INV023935有三个项目 X,每个 X 有三个不同的序列号。但是,某些项目没有序列号,因此不会显示在表 2 中。例如,INV023937中的物料 N1 没有任何序列号;因此,它只会显示在表 1 中。

我想合并到两个表,如下所示:

我想制作的新表

有数千行,并且不断更新,所以我无法手动执行此操作。我希望我可以使用SQL来创建上面的表格。

如果您能帮助我,我将不胜感激!

这将适用于 SQL Server 始终显示表 1 值,然后显示表 2 中的串联序列号(如果可用)(否则为空白)

SELECT
T1.[Date] AS [Document Date],
T1.[SOP Number],
T1.QTY,
T1.Line AS [Line Item Sequence],
T1.Item AS [Item Number],
COALESCE(STUFF((
SELECT ',' + T2.[Serial Number] AS [text()]
FROM Table2 T2
WHERE T1.[SOP Number] = T2.[SOP Number]
AND T1.[Line] = T2.[Line]
-- Any other join conditions (if item is also required or not)
FOR XML PATH('')
), 1, 1, ''), '') AS [Serial Number]
FROM Table1 T1

最新更新