我有以下表格
客户表
群组表
Customer_Group表
客户可能属于也可能不属于某个群组。如果它们属于任何/多个组,则在Customer_Group表中创建一个条目。我需要一个SQL查询,它将列出所有客户及其组名。如果它们不属于任何组,则它可以显示NULL。否则,组名应显示为逗号分隔。例如,如下所示
CustomerId CustomerName GroupName
1 ABC NULL
2 DEF Sales,Marketing
客户表数据如下
CustomerId CustomerName
1 ABC
2 DEF
集团表数据如下
GroupId GroupName
1 Sales
2 Marketing
Customer_Group数据如下
CustomerId GroupId
2 1
2 2
请帮我查询SQL查询,列出所有客户及其组名。我正在使用 Microsoft SQL Server 2005 。提前谢谢。
答案 0 :(得分:4)
可能是这样的东西
SELECT C.CustomerId, C.CustomerName,
GroupName = STUFF(
(SELECT ',' + GI.GroupName FROM [Group] AS GI
INNER JOIN Customer_Group AS CGI ON CGI.GroupId = GI.GroupId
WHERE CGI.CustomerId = C.CustomerId
FOR XML PATH, TYPE).value('.[1]', 'nvarchar(max)'), 1, 1, '')
FROM Customer C LEFT JOIN Customer_Group CG ON C.CustomerId = CG.CustomerId
GROUP BY C.CustomerId, C.CustomerName
<强> FIDDLE DEMO 强>
输出
CustomerId CustomerName GroupName
+------------------------------------+
1 ABC NULL
2 DEF Sales,Marketing