如何在MSSQL中组合多行

时间:2011-05-11 16:19:41

标签: sql sql-server pivot

  

可能重复:
  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个。

任何帮助将不胜感激。提前谢谢!

2 个答案:

答案 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传递密钥。