当前位置: 代码网 > it编程>数据库>MsSqlserver > SQL多行值合并一行字符串逗号分隔

SQL多行值合并一行字符串逗号分隔

2024年05月18日 MsSqlserver 我要评论
问题:假设我们有一张学生表:姓名,科目,成绩。在查询的sql使用中我们可能会有这样一种需求:展示学生姓名和科目成绩,科目成绩用逗号分隔。实际上也就是将这个学生的所有成绩记录转换为一条记录展示出来。就可

问题:

假设我们有一张学生表:姓名,科目,成绩。

在查询的sql使用中我们可能会有这样一种需求:展示学生姓名和科目成绩,科目成绩用逗号分隔。

实际上也就是将这个学生的所有成绩记录转换为一条记录展示出来。

就可以使用这个sql:

select 姓名, listagg(成绩, ',') within group (order by 科目) as 科目成绩
from 学生表
group by 姓名;

这个查询首先选择了 “姓名” 字段,然后使用 listagg函数将相同学生的 “成绩” 字段值以逗号分隔的形式合并成一个字符串,并按照 “科目” 字段的顺序进行排序。

listagg 

listagg 是一个用于聚合操作的字符串函数,它在oracle数据库系统中可用,当然达梦也可以。该函数用于将多个行中的值连接为一个字符串,并且可以指定分隔符来分隔每个值。

通常语法如下:

listagg(expression, delimiter) within group (order by column)
  • expression 是要连接的列或表达式。
  • delimiter 是用于分隔每个值的字符串。
  • within group 子句用于指定对结果进行排序的列。可以选择省略此子句。
  • order by 子句用于指定排序的顺序。

listagg 函数将具有相同分组键的行的值连接起来,并使用指定的分隔符将它们分隔开。这非常适用于将多个值合并为一个字符串,常用于生成逗号分隔的列表。

实例:

如图我们看到这个查询结果中parti_name字段有多个数据,现在我们把它转换为一条记录查询出来且用逗号隔开。

select uuid as uuid, listagg(parti_name, ',') within group ( order by displayorder) as parti_name
		from participa 
 group by uuid 

结果:

注意:

listagg 聚合函数是 oracle 数据库中的特定函数,用于将多个行的值进行连接。

因此,listagg 函数可以在 oracle 数据库中使用,并且从 oracle 11g 版本开始可用。

在其他数据库系统中,可能会有类似的函数用于字符串聚合操作,但具体的函数名称、语法和用法可能会有所不同。如下是一些其他数据库系统中类似 listagg 的函数,有类似需求可百度求解:

  • mysql:group_concat
  • sql server:string_agg
  • postgresql:string_agg
  • ibm db2:listagg

到此这篇关于sql多行值合并一行字符串逗号分隔的文章就介绍到这了,更多相关sql多行值合并内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com