更改表的输出

时间:2014-07-30 15:37:04

标签: tsql

如何从下面更改表格的输出:

 A,1
 A,2
 A,3
 B,1
 B,2
 C,1
 C,2
 D,1
 D,2
 D,3
 D,4
 

对此:

 A,1,2,3
 B,1,2
 C,1,2
 D,1,2,3,4
 

我认为PIVOT可能有效,但这需要一个聚合。欢迎任何建议。

编辑:这也可能只使用char数据类型吗?我的初始数据集大约是1000行

1 个答案:

答案 0 :(得分:2)

这应该适合你。

DECLARE @Test TABLE (Col1 VARCHAR(10))

INSERT INTO @Test
VALUES ('A,1'),
      ('A,2'),
      ('A,3'),
      ('B,1'),
      ('B,2'),
      ('C,1'),
      ('C,2'),
      ('D,1'),
      ('D,2'),
      ('D,3'),
      ('D,4');
WITH cte_Split
AS (
SELECT SUBSTRING(Col1, 1, CHARINDEX(',', Col1) - 1) AS Col1_A,
     SUBSTRING(Col1, CHARINDEX(',', Col1) + 1, LEN(Col1)) AS Col1_B
FROM @Test
)
,cte_Group 
AS (
SELECT a.Col1_A,
     STUFF((SELECT ',' + Col1_B
           FROM cte_Split AS b
           WHERE b.Col1_A = a.Col1_A
           FOR XML PATH ('')), 1, 1, '') AS Col1_c
FROM cte_Split AS a
GROUP BY a.Col1_A
)
SELECT Col1_A+','+Col1_c
FROM cte_Group