gpt4 book ai didi

sql-server - SQL 中的逗号分隔结果

转载 作者:行者123 更新时间:2023-12-01 18:37:32 29 4
gpt4 key购买 nike

我有以下代码,将为我的结果创建一个逗号分隔的列表:

DECLARE @listStr VARCHAR(MAX)
SELECT @listStr = COALESCE(@listStr+', ' ,'') + INSTITUTIONNAME
FROM EDUCATION
WHERE STUDENTNUMBER= '111'
SELECT @listStr

问题在于它创建了一个巨大的逗号分隔行。我需要它返回每行的逗号分隔列表。

因此,如果 Simon 曾是 2 个机构的成员,那么我期望:

"INSTITUTION1, INSTITUTION2"

由于我没有提供 where 子句,我希望数据库中的每一行的结果都像这样显示。

最佳答案

更新(按照@Aaron 在评论中的建议)

STRING_AGG是在现代版本的 SQL Server(2017 或更高版本)中执行此操作的首选方法。它还支持轻松订购。

SELECT
STUDENTNUMBER
, STRING_AGG(INSTITUTIONNAME, ', ') AS StringAggList
, STRING_AGG(INSTITUTIONNAME, ', ') WITHIN GROUP (ORDER BY INSTITUTIONNAME DESC) AS StringAggListDesc
FROM Education E
GROUP BY E.STUDENTNUMBER;

原始答案:

使用FOR XML PATH('') - 将条目转换为逗号分隔的字符串和 STUFF () - 这是修剪第一个逗号 - 如下所示这给出了相同的逗号分隔结果

SELECT
STUFF((SELECT ',' + INSTITUTIONNAME
FROM EDUCATION EE
WHERE EE.STUDENTNUMBER = E.STUDENTNUMBER
ORDER BY sortOrder
FOR XML PATH(''), TYPE).value('text()[1]', 'nvarchar(max)')
, 1, LEN(','), '') AS XmlPathList
FROM EDUCATION E
GROUP BY E.STUDENTNUMBER

这是FIDDLE显示 STRING_AGGFOR XML PATH('') 的结果。

关于sql-server - SQL 中的逗号分隔结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18870326/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com