SQL查询以获取具有组名的客户列表

时间:2014-08-02 05:29:10

标签: sql-server

我有以下表格

客户表

  • 客户ID
  • 客户名称

群组表

  • 的GroupId
  • 组名

Customer_Group表

  • 客户ID
  • 的GroupId

客户可能属于也可能不属于某个群组。如果它们属于任何/多个组,则在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 。提前谢谢。

1 个答案:

答案 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