我正在尝试获得以下内容:
姓名 | 价值 |
---|---|
约翰·史密斯 | 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 |
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