首页 > 数据库 > mysql教程 > 如何在 SQL 中将多行连接成单个字符串?

如何在 SQL 中将多行连接成单个字符串?

Patricia Arquette
发布: 2025-01-01 12:19:10
原创
335 人浏览过

How to Concatenate Multiple Rows into a Single String in SQL?

基于 ID 连接值

在数据操作中,通常需要将多行数据组合成单个字符串。这可以通过串联来实现,其中字符串由较小的片段组装而成。

问题陈述:

您有一个名为“结果”的表,其中有两列:“ Response_ID”和“标签”。每个“Response_ID”对应多个“Label”值。您的目标是生成一个新表,其中每个“Response_ID”一行,所有“标签”值连接成一个字符串,并用逗号分隔。

解决方案:

要根据“Response_ID”连接值,您可以使用以下 SQL查询:

select T1.Response_ID,
       stuff((select ','+T2.Label
              from Results as T2
              where T1.Response_ID = T2.Response_ID
              for xml path(''), type).value('.', 'varchar(max)'), 1, 1, '') as Label
from Results as T1
group by T1.Response_ID
登录后复制

解释:

  • T1.Response_ID: 原始数据中的“Response_ID”列table.
  • Stuff():此函数连接字符串。它采用以下参数:

    • 要连接的结果字符串(在括号中)。
    • 结果字符串中应开始连接的起始位置(在本例中为 1)。
    • 要从结果字符串开头删除的子字符串的长度(在此为 1) case)。
    • 要连接的字符串。
  • XML 路径:此子查询为连接过程生成 XML 片段。每个“Label”值都包含在以逗号分隔的 XML 元素中。
  • value():此函数从 XML 片段中提取连接的字符串。

示例:

考虑以下内容表:

Response_ID Label
12147 It was not clear
12458 Did not Understand
12458 Was not resolved
12458 Did not communicate
12586 Spoke too fast
12587 Too slow

上面的查询将产生以下输出:

Response_ID Label
12147 It was not clear
12458 Did not Understand,Was not resolved,Did not communicate
12586 Spoke too fast
12587 Too slow

注意:连接字符串的顺序可能并不总是可预测的。为了精确控制顺序,可以在子查询中使用“ORDER BY”语句。

以上是如何在 SQL 中将多行连接成单个字符串?的详细内容。更多信息请关注PHP中文网其他相关文章!

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