gpt4 book ai didi

sql - 将连接中的多个返回值转换为单个逗号分隔列表

转载 作者:行者123 更新时间:2023-12-02 08:14:55 24 4
gpt4 key购买 nike

我有这个问题:

SELECT
c.FirstName + ' ' + c.LastName AS Name,
r.Name AS Roles
FROM
Contacts c
JOIN AspNetUsers u on c.ContactID = u.ContactID
JOIN AspNetUserRoles ur on u.id = ur.UserId
JOIN AspNetRoles r on ur.RoleId = r.Id

这会返回一个像这样的集合:

Name        Roles
-----------------------
Bob Jones Admin
Bob Jones Agent
Jane Smith Broker
Jane Smith Buyer

我想要的是:

Name        Roles
-----------------------
Bob Jones Admin, Agent
Jane Smith Broker, Buyer

我一直在研究 COALESCEGroupBy,但我似乎无法找到正确的组合。

最佳答案

您可以使用 XML 字符串执行此操作,如您在 Google 上搜索“SQL Server 字符串聚合”时所看到的那样。

在您的情况下,由于 JOIN,查询可能并不明显。我认为这是最好的方法:

SELECT c.FirstName + ' ' + c.LastName AS Name,
STUFF((SELECT ',' + r.Name
FROM AspNetUsers u JOIN
AspNetUserRoles ur
ON u.id = ur.UserId JOIN
AspNetRoles r
ON ur.RoleId = r.Id
WHERE c.ContactID = u.ContactID
FOR XML PATH (''), TYPE
).VALUE('.', 'nvarchar(max)'
), 1, 1, '')
as Roles
FROM Contacts c;

这里的要点是,如果可以避免的话,您不想在外部查询中进行聚合。相反,它使用相关的子查询。

注意:这不是完全等同的,因为它将返回没有角色的用户。

关于sql - 将连接中的多个返回值转换为单个逗号分隔列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42879461/

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