SQL数据透视表1:将M行转换为字符串列
问题描述:
我有一个1:M记录集,我需要将其转换为结果连接的列。SQL数据透视表1:将M行转换为字符串列
创建示例数据:
CREATE TABLE #temptable
(
ID int,
Division int,
Material int
);
insert into #temptable
Values
(999, 1, 1)
,(999, 1, 2)
,(999, 1, 3)
,(999, 2, 1)
,(999, 2, 6)
,(999, 3, 2)
的样本数据:
ID Division Material
---- ---------- ----------
999 1 1
999 1 2
999 1 3
999 2 1
999 2 6
999 3 2
我需要的结果是这样的,其中每个部门的材料连接在一起:
ID Division-1 Division-2 Division-3
---- ---------- ---------- ----------
999 1,2,3 1,6 2
答
试试这个:
SELECT ID,
[1] AS 'Division-1',
[2] AS 'Division-2',
[3] AS 'Division-3'
FROM
(
SELECT DISTINCT
a.ID,
a.Division,
LEFT(r.ResourceName, LEN(r.ResourceName) - 1) ResourceName
FROM #temptable a
CROSS APPLY
(
SELECT CAST(Material AS VARCHAR(10))+','
FROM #temptable t
WHERE a.[ID] = t.[ID]
AND a.Division = t.Division
FOR XML PATH('')
) r(ResourceName)
) src PIVOT(MAX(ResourceName) FOR Division IN([1],
[2],
[3])) piv;
简要解释 我们需要通过逗号分隔的结构创建支点。
下面的查询将列值转换为以逗号分隔的行。
SELECT a.ID,
a.Division,
LEFT(r.ResourceName, LEN(r.ResourceName) - 1) ResourceName
FROM #temptable a
CROSS APPLY
(
SELECT CAST(Material AS VARCHAR(10))+','
FROM #temptable t
WHERE a.[ID] = t.[ID]
AND a.Division = t.Division
FOR XML PATH('')
) r(ResourceName);
之后,我们创建了关键点。
+0
这非常出色,超越了我的功夫水平。非常感谢你。 – ScottM
+0
@ScottM:如果有帮助,将其标记为答案,以防人们偶然发现 –
你尝试过什么吗? –
什么版本的SQL? – Shawn
Kamran在下面的答案解决了这个问题。 – ScottM