下面的代码将为我的结果创建一个逗号分隔的列表:
DECLARE @listStr VARCHAR(MAX)
SELECT @listStr = COALESCE(@listStr+', ' ,'') + INSTITUTIONNAME
FROM EDUCATION
WHERE STUDENTNUMBER= '111'
SELECT @listStr
问题是它创建了一个大量的逗号分隔行。我需要它每行返回一个逗号分隔的列表。
所以如果 Simon
已经加入了两个机构,我想:
"INSTITUTION1, INSTITUTION2"
因为我没有提供where子句,所以我希望数据库中的每一行的结果都是这样显示的。
5条答案
按热度按时间bogh5gae1#
使用
FOR XML PATH('')
-它将条目转换为逗号分隔的字符串和stuff()——它将修剪第一个逗号——如下所示,它将给出相同的逗号分隔结果这是小提琴
p5fdfcr12#
对于sql server 2017及更高版本,您可以使用
STRING_AGG
功能https://docs.microsoft.com/en-us/sql/t-sql/functions/string-agg-transact-sql
下面的示例将null值替换为“n/a”,并返回单个结果单元格中由逗号分隔的名称。
这是结果集。
也许一个更常见的用例是分组,然后聚合,就像使用
SUM
,COUNT
或者AVG
.dl5txlt93#
这适用于sql server 2016
vngu2lb84#
如果sql server<2017,您可以使用groupconcat。其语法和性能远远优于for-xml路径解决方案。
安装:
用法:
不过,groupconcat不支持排序。如果您需要订购,可以使用pivot、cte和windows功能:
e5njpo685#
我刚看到另一个问题和这个很相似!
下面是规范的northwind(由于某些原因拼写略有不同)数据库示例。