2012-04-02 13 views
2
SELECT 
    C.SOId, Ser.TotalService, S.TotalSales 
FROM 
    salesorder C 
    INNER JOIN (SELECT SOId,SUM(charge) as TotalService FROM sales_serviceline GROUP BY SOId) Ser 
    ON C.SOId = Ser.SOId 
    INNER JOIN (SELECT SOId,SUM(PriceEach*qty) as TotalSales FROM salesline GROUP BY SOId) S 
    ON C.SOId = S.SOId 

Erläuterung: One Salesorder viele salesline der Ein Salesorder hat vielen salesline DiensteSQL GroupBy & InnerJoin

so, wenn ein Salesorder saleslins & salesline_service hat dann die obige Abfrage erfolgreich retrives den Gesamtbetrag dieser Salesorder aber Wenn es nur einen Salinen- oder nur einen Vertriebslinien-Service gibt, wird der Kundenauftrag nicht erneut versucht, diese Abfrage zu ändern, um alle Ergebnisse zu erhalten?

+0

Was ist das Problem? Was meinst du mit "alle Ergebnisse"? – aProgrammer

Antwort

3

Ich denke, Sie suchen nach einem LEFT JOIN. Wenn es keine Zeilen in Ser oder S ist, dann wird die LEFT JOIN machen TotalService oder TotalSalesNULL

SELECT 
    C.SOId, Ser.TotalService, S.TotalSales 
FROM 
    salesorder C 
    LEFT JOIN (SELECT SOId,SUM(charge) as TotalService FROM sales_serviceline GROUP BY SOId) Ser 
    ON C.SOId = Ser.SOId 
    LEFT JOIN (SELECT SOId,SUM(PriceEach*qty) as TotalSales FROM salesline GROUP BY SOId) S 
    ON C.SOId = S.SOId 

Wenn Sie nicht wollen, sie als NULL haben. Dann können Sie die einfache Verwendung beenden COALESCE(). Wie folgt:

SELECT 
    C.SOId, 
    COALESCE(Ser.TotalService,0) AS TotalService, 
    COALESCE(S.TotalSales,0) AS TotalSales 
FROM 
    salesorder C 
    LEFT JOIN (SELECT SOId,SUM(charge) as TotalService FROM sales_serviceline GROUP BY SOId) Ser 
    ON C.SOId = Ser.SOId 
    LEFT JOIN (SELECT SOId,SUM(PriceEach*qty) as TotalSales FROM salesline GROUP BY SOId) S 
    ON C.SOId = S.SOId 
+0

'ISNULL()' ist eine MySQL-Funktion. Der ANSI-Standard definiert 'COALESCE()', das in fast allen DBMS verwendet werden kann. –

+0

Danke für den Hinweis. Es ist auch eine MSSQL-Funktion. – Arion

+0

Ja, mein Fehler. SQL-Server hat 'ISNULL()'. MySQL hat das Äquivalent "IFNULL()". (MySQL 'ISNULL()' tut etwas anderes) –