SQL中逗号分隔的结果

2024-09-28 20:43:13 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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

因此,如果Simon已经成为两个机构的一部分,那么我预计:

"INSTITUTION1, INSTITUTION2"

因为我没有提供where子句,所以我希望数据库中每一行的结果都是这样显示的


Tags: 代码from列表whereselectmax逗号simon
3条回答

这适用于sql server 2016

USE AdventureWorks
GO
DECLARE @listStr VARCHAR(MAX)
SELECT @listStr = COALESCE(@listStr+',' ,'') + Name
FROM Production.Product
SELECT @listStr
GO

对于Sql Server 2017及更高版本,您可以使用新的STRING_AGG函数

https://docs.microsoft.com/en-us/sql/t-sql/functions/string-agg-transact-sql

The following example replaces null values with 'N/A' and returns the names separated by commas in a single result cell.

SELECT STRING_AGG ( ISNULL(FirstName,'N/A'), ',') AS csv 
FROM Person.Person;

Here is the result set.

John,N/A,Mike,Peter,N/A,N/A,Alice,Bob

也许更常见的用例是分组然后聚合,就像使用SUMCOUNTAVG一样

SELECT a.articleId, title, STRING_AGG (tag, ',') AS tags 
FROM dbo.Article AS a       
LEFT JOIN dbo.ArticleTag AS t 
    ON a.ArticleId = t.ArticleId 
GROUP BY a.articleId, title;

使用^{}-将条目转换为逗号分隔的字符串,使用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 listStr

FROM EDUCATION E
GROUP BY E.STUDENTNUMBER

这是FIDDLE

相关问题 更多 >