2016-11-19 10 views
0

Ich frage mich, wie die Anzahl der Aufträge für jeden Kunden abfragen, deren Status ist "auf Nachbestellung" und denke, dass ich es ziemlich nah haben, aber nicht ganz was ich erreichen möchte, weil es nur die Kunden zählt, die ihren Status und nicht alle Kunden "nachbestellen" (was ansonsten zu 0 zählen sollte, wo "nachbestellen" nicht anwendbar ist).SQL-Abfrage viele-zu-viele Beziehung Anzahl spezifische Bedingung Anzahl 0 für diejenigen ohne

Ich bin mir ziemlich sicher, dass ich dies mit einer Unterabfrage oder einem Join erreichen muss. Jede Hilfe wäre willkommen. Hier ist, was ich habe bisher:

SELECT custName, ordNum, COUNT(*) AS reorder_count 
FROM Orders, Customers 
WHERE Orders.custNum = Customers.custNum 
AND status = 'on reorder' 
GROUP BY orderNum, custName; 

Antwort

1

Nie Kommas in der FROM Klausel. Immer verwenden explizite JOIN Syntax. Es ist korrekt, modern und leistungsfähiger.

Sie wollen ein LEFT JOIN:

SELECT c.customerName, COUNT(o.orderNumber) AS reorder_count 
FROM Customers c LEFT JOIN 
    Orders o 
    ON o.customerNumber = c.customerNumber AND o.status = 'on reorder' 
GROUP BY c.customerName; 
+1

Das war sehr hilfreich! Ich werde tun, was ich kann, um immer einen expliziten JOIN zu verwenden! – finiteloop