【问题标题】:How to combine multiple rows in MSSQL [duplicate]如何在MSSQL中组合多行[重复]
【发布时间】:2011-08-23 11:21:40
【问题描述】:

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

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

【问题讨论】:

    标签: sql sql-server pivot


    【解决方案1】:
    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
    

    【讨论】:

      【解决方案2】:

      Coalesce 函数可用于产生该结果。 Coalesce 返回集合中的第一个非空值。如果您以下列方式使用它,它将按顺序递归返回每个值,直到它为空并将其作为逗号分隔的字符串返回。如果需要,您可以使用任何其他分隔符。

      DECLARE @pAddr VarChar(MAX)
      SELECT @pAddr = COALESCE(@pAddr + ', ', '') + [Address]
      FROM AddressTable
      WHERE AddressTable.Key = @pKey
      

      您可以将此代码放入 UDF 中,然后在视图中简单地调用该 UDF 并传递密钥。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-23
        • 2021-08-05
        • 1970-01-01
        • 2015-10-02
        • 2013-02-06
        • 1970-01-01
        相关资源
        最近更新 更多