SQL - 连接另一列中的不同值

问题描述 投票:0回答:1

我正在尝试获得以下内容:

姓名 价值
约翰·史密斯 123456
弗雷德·博格斯 785615
约翰·史密斯 124756
弗雷德·博格斯 789564
约翰·史密斯 124568
弗雷德·博格斯 456789

显示为:

姓名 价值
约翰·史密斯 123456, 124756, 124568
弗雷德·博格斯 785615、789564、456789

本质上是将它们连接到“名称”列中的不同值上

已经摸索这个有一段时间了,我确信可能有一种简单的方法可以做到这一点,但我缺少

更新:

STUFF(
        (
          SELECT ', ' + Cast(Value As varchar(Max))
          FROM T1
          FOR XML PATH('')
        ), 1, 1, '')

然而,这显示了以下内容:

姓名 价值
约翰·史密斯 123456, 124756, 124568, 785615, 789564, 456789
弗雷德·博格斯 123456, 124756, 124568, 785615, 789564, 456789
sql concatenation
1个回答
0
投票

String_Agg 通常会执行此操作,但这取决于 RDBMS 和版本。 String_Agg 是一个聚合函数行 min/max/avg,它根据分组将多行连接成一行(示例中的名称)

示例(如果支持)(string_Agg( ,,ordering if need)

SELECT name, string_AGG(value,',' Order by value)
FROM TableName
GROUP BY Name

每个引擎都有自己的方法来执行此操作,因此语法可能会根据 RDBMS 和版本的不同而有所不同。

例如 MySQL 使用 Group_Concat 代替 https://dev.mysql.com/doc/refman/8.0/en/aggregate-functions.html#function_group-concat

© www.soinside.com 2019 - 2024. All rights reserved.