如果名称相同,我尝试将用户名字段组合成逗号分隔的字符串。
电流输出:
由于 Name = Admin 有 4 个用户链接到它,我试图显示为[电子邮件受保护] /cdn-cgi/l/email-protection, [电子邮件受保护] /cdn-cgi/l/email-protection, [电子邮件受保护] /cdn-cgi/l/email-protection, [电子邮件受保护] /cdn-cgi/l/email-protection而不是将其放在单独的行中。
SQL查询
SELECT DISTINCT
Name,
a3.UserName
FROM
PromotionTracker.dbo.AspNetRoles a1
JOIN
PromotionTracker.dbo.AspNetUserRoles a2
ON a1.Id = a2.RoleId
JOIN
PromotionTracker.dbo.AspNetUsers a3
ON a2.UserId = a3.Id
我尝试使用 STUFF() 函数,但它仍然给我相同的输出,不确定查询中的错误是什么。
使用 STUFF 函数更新了查询
SELECT DISTINCT
Name,
STUFF((
SELECT DISTINCT
',' + a3.UserName FOR XML PATH('') ), 1, 1, '' )
FROM
PromotionTracker.dbo.AspNetRoles a1
JOIN
PromotionTracker.dbo.AspNetUserRoles a2
ON a1.Id = a2.RoleId
JOIN
PromotionTracker.dbo.AspNetUsers a3
ON a2.UserId = a3.Id
SQL Server已经支持string_agg() http://%20https://learn.microsoft.com/en-us/sql/t-sql/functions/string-agg-transact-sql?view=sql-server-ver15自 SQL Server 2017 起。在您的上下文中,这将是:
SELECT r.Name, STRING_AGG(u.UserName, ',') as usernames
FROM PromotionTracker.dbo.AspNetRoles r JOIN
PromotionTracker.dbo.AspNetUserRoles ur
ON r.Id = ur.RoleId JOIN
PromotionTracker.dbo.AspNetUsers u
ON ur.UserId = u.Id
GROUP BY r.Name;
请注意,无意义的表别名已替换为代表表的别名(例如,代表用户的“u”)。此外,所有列引用都是限定的,因此很清楚它们来自哪个表。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)