首页 > 数据库 > mysql教程 > 如何将多个 SQL Server 行合并为单个逗号分隔列?

如何将多个 SQL Server 行合并为单个逗号分隔列?

Barbara Streisand
发布: 2025-01-21 07:02:36
原创
1047 人浏览过

How to Combine Multiple SQL Server Rows into a Single Comma-Delimited Column?

在 SQL Server 中将多行合并为一个逗号分隔值的列

问题:

您需要将具有公共标识符的多行合并到单个列中,其中值以逗号分隔。例如,您希望将数据从:

<code>[TicketID]  [Person]
T0001       Alice
T0001       Bob
T0002       Catherine
T0002       Doug
T0003       Elaine</code>
登录后复制

转换为:

<code>[TicketID]  [People]
T0001       Alice, Bob
T0002       Catherine, Doug
T0003       Elaine</code>
登录后复制

SQL Server 2005 的解决方案:

  1. 使用 STUFF 函数将值组合成单个字符串:
STUFF(ISNULL((SELECT ', ' + x.Person
                FROM @Tickets x
               WHERE x.TicketID = t.TicketID
            GROUP BY x.Person
             FOR XML PATH (''), TYPE).value('.','VARCHAR(max)'), ''), 1, 2, '')
登录后复制
  1. FOR XML PATH 子句对值进行分组并将其作为 XML 字符串返回。
  2. TYPE 子句指定结果应为文本字符串。
  3. value 函数从 XML 字符串中提取文本。
  4. ISNULL 函数处理没有值要组合的情况。
  5. 最终的 STUFF 函数删除组合字符串中的前导逗号(如果存在)。

示例查询:

SELECT t.TicketID,
       STUFF(ISNULL((SELECT ', ' + x.Person
                FROM @Tickets x
               WHERE x.TicketID = t.TicketID
            GROUP BY x.Person
             FOR XML PATH (''), TYPE).value('.','VARCHAR(max)'), ''), 1, 2, '') [无前导逗号],
       ISNULL((SELECT ', ' + x.Person
                FROM @Tickets x
               WHERE x.TicketID = t.TicketID
            GROUP BY x.Person
             FOR XML PATH (''), TYPE).value('.','VARCHAR(max)'), '') [如果非空则有前导逗号]
  FROM @Tickets t
GROUP BY t.TicketID
登录后复制

以上是如何将多个 SQL Server 行合并为单个逗号分隔列?的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板