C# Sql客户与所有产品查询

C# Sql客户与所有产品查询,c#,sql,sql-server,C#,Sql,Sql Server,我有三张桌子 客户、姓名、地址 报纸名称、名称、价格 周刊杂志、名字、价格 订单id、cid、nid、wid 现在一个客户拥有两份以上的报纸或杂志。 我正在寻找以下结果的查询 john--news1,news2,weeklymag1 King--news1 Jessel--news2,mag1,weeklymag2 Smith--new4,mag3 还是我需要创建此报告的过程 感谢您的时间和回答。您可以使用GROUP CONCAT: SELECT c.cid, c.name, CONCA

我有三张桌子

客户、姓名、地址 报纸名称、名称、价格 周刊杂志、名字、价格 订单id、cid、nid、wid 现在一个客户拥有两份以上的报纸或杂志。 我正在寻找以下结果的查询

john--news1,news2,weeklymag1

King--news1

Jessel--news2,mag1,weeklymag2

Smith--new4,mag3
还是我需要创建此报告的过程


感谢您的时间和回答。

您可以使用GROUP CONCAT:

SELECT c.cid, c.name, CONCAT(GROUP_CONCAT(n.name), ', ', GROUP_CONCAT(w.name))
FROM customers c
LEFT JOIN orders o ON c.cid = o.cid
LEFT JOIN newspaper n ON o.nid = n.nid
LEFT JOIN weeklymag w ON o.wid = w.wid
GROUP BY c.cid, c.name

使用GROUP_CONCAT函数

SELECT c.name, CONCAT(GROUP_CONCAT(n.name SEPARATOR ','), IF(COUNT(DISTINCT n.id)>0 AND COUNT(DISTINCT m.id) >0,',',''), GROUP_CONCAT(m.name SEPARATOR ',')) mags
FROM customers c
LEFT JOIN orders o ON o.cid = c.cid
LEFT JOIN newspaper n ON n.nid = o.nid
LEFT JOIN weeklymag m ON m.wid = o.wid
GROUP BY c.cid
选择C.NAME

    STUFF((SELECT DISTINCT' '+ N.NAME + ' | '
                FROM NEWSPAPER N   
                JOIN ORDERS O ON O.NEWS_ID = N.ID 
                WHERE O.CUST_ID = C.ID
                FOR XML PATH('') , TYPE).value('.','NVARCHAR(MAX)'),1,0,'')as NEWS
     ,
     STUFF((SELECT DISTINCT' '+ w.name +' | '
                FROM weekly w   
                JOIN ORDERS O ON O.Weekly_id = w.id  
                WHERE O.CUST_ID = C.ID
                FOR XML PATH('') , TYPE).value('.','NVARCHAR(MAX)'),1,0,'')as WEEKLY
    ,STUFF((SELECT DISTINCT' '+ m.name +' | '
                FROM monthly m   
                JOIN ORDERS O ON o.monthly_id  = m.id  
                WHERE O.CUST_ID = C.ID
                FOR XML PATH('') , TYPE).value('.','NVARCHAR(MAX)'),1,0,'')as MAG

来自客户C

我正在使用我的sql server,而group_concat不起作用,我仍在尝试寻找其他替代方案感谢我通过使用STUFF找到了group_concat的替代方案。解决了它我正在使用sql server,group_concat不起任何其他替代方案啊,好吧,我对sql server没有太多经验,但这里似乎有人解决了一个类似的问题谢谢我明白了。