可能重复:
Simulating group_concat MySQL function in MS SQL Server 2005?
Concat groups in SQL Server
我正在尝试编写一个将行组合在一起的SQL查询。我需要它通过ID#将未指定数量的行组合在一起,但是将它们的地址连接起来放在一个单元格中。
说我们有
ID, Address
p1 a1
p1 a2
p1 a3
p2 a4
p2 a5
我想要
ID, Address
p1 a1,a2,a3
p2 a4,a5
每个ID的地址数量可能会有所不同。有些ID有1个,其他有50个。
任何帮助将不胜感激。提前谢谢!
答案 0 :(得分:2)
Select T1.Id
, Stuff(
(
Select ', ' + T2.Address
From MyTable As T2
Where T2.Id = T1.Id
Order By T2.Address
For Xml Path(''), type
).value('.', 'nvarchar(max)'), 1, 2, '') As Address
From MyTable As T1
Group By T1.Id
答案 1 :(得分:0)
Coalesce函数可用于生成该结果。 Coalesce返回集合中的第一个非null值。如果以下列方式使用它,它将按顺序递归返回每个值,直到它为空并将其作为逗号分隔的字符串返回。如果需要,您可以使用任何其他分隔符。
DECLARE @pAddr VarChar(MAX)
SELECT @pAddr = COALESCE(@pAddr + ', ', '') + [Address]
FROM AddressTable
WHERE AddressTable.Key = @pKey
您可以将此代码放入UDF,然后在视图中简单地调用该UDF传递密钥。