将Sql Table转换为分隔列表

时间:2015-03-24 22:10:29

标签: sql-server-2008 tsql

如果给出这样的表

Group   Value
Item 1  A
Item 1  B
Item 1  C
Item 1  D
Item 2  Z
Item 2  Y
Item 2  X
Item 2  W

我想在这样的表中得到一个结果

Group   
Item 1  A|B|C|D
Item 2  Z|Y|X|W

现在我知道如何做一个单独的小组。

 SELECT @Item1= ISNULL(@Item1+ '|', '') + CodeValue
 FROM Codes
 WHERE CodeType = 'Item 1'

我想我可以把它放在循环中。我的问题是有更优雅的方式吗?

1 个答案:

答案 0 :(得分:0)

找到吼叫,希望会满足

DECLARE @tABLE TABLE(ItemName varchar(10),Code char(1))
insert into @tABLE
select 'Item 1',  'A'
union
select 'Item 1',  'B'
union 
select 'Item 1',  'C'
union
select 'Item 1',  'D'
union
select 'Item 2',  'W'
union
select 'Item 2',  'X'
union
select 'Item 2',  'Y'
union
select 'Item 2',  'Z'

select distinct ItemName ,
STUFF((Select ' | '+Code
from @tABLE T1
where T1.ItemName=T2.ItemName
FOR XML PATH('')),1,2,'') from @tABLE T2

ItemName(无列名) 项目1 A | B | C | d 项目2 W | X | Y | ž