2017-03-02 1 views
-3

Ich habe 3 TabellenSql Kunden mit allen Produkten Abfrage

  • Kunden (cid, Name, Adresse)
  • Zeitung (nid, Name, Preis)
  • Weeklymag (wid, Name, Preis)
  • Bestellungen (id, cid, nid, wid)

Jetzt ein Kunde mehr als zwei Zeitung oder Zeitschrift hat. Ich suche Abfrage für folgendes Ergebnis

john--news1,news2,weeklymag1 

King--news1 

Jessel--news2,mag1,weeklymag2 

Smith--new4,mag3 

Oder brauche ich Prozedur diesen Bericht zu erstellen ??

Danke für Ihre Zeit und Antworten.

Antwort

0

Sie könnten diese mit GROUP CONCAT tun:

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 
+0

Ich bin mit meinem SQL-Server und group_concat funktioniert nicht Ich bin immer noch auf der Suche nach anderen Alternativen – DIXIT

+0

Sie markiert die Frage als mySQL ... – kbball

+0

Dank Ich fand den Ersatz von group_concat() mit STUFF() .solved – DIXIT

0

Verwenden Sie die GROUP_CONCAT FUNCTION

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 
+0

Ich benutze SQL-Server und group_concat tut keine andere Alternative – DIXIT

+0

Ahh okay, ich habe nicht viel Erfahrung mit SQL Server, aber hier scheint es, als hätte jemand eine ähnliche Frage gelöst [link] (http://stackoverflow.com/questions/17591490/how-to- make-a-query-mit-gruppen-concat-in-sql-server) – user1898027

+0

Danke ich habe es. – DIXIT

0

SELECT 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 

VON KUNDEN C