2017-06-04 3 views
0

Ich bin mir nicht sicher, warum das nicht funktioniert.SQL: Zählwerte in einer Tabelle basierend auf WHERE von anderen Tabelle

Ich habe zwei einfache Tabellen:

Orders 
OrderTypeID EmployeeID Completion_needed 
10308  72    15% 
10309  73    20% 
10310  74    30% 

Customers 
Customer ID OrderTypeID OrderDate Order_completed 
    1   10308  2015-09-18   5% 
    2   10309  2015-09-19   30% 
    3   10310  2017-09-20   25% 
    4   10308  2015-09-18   17% 
    2   10308  2015-09-19   20% 
    3   10309  2017-09-20   7% 

ich berechnen will, wie viele Kunden nicht Aufträge abgeschlossen hat, wo Order_completed in der Tabelle Customers weniger als Completion_needed in der Tabelle Bestellungen (bitte nicht, dass ein Kunde haben mehr als eine Auftragsart).

Dies ist meine Frage, aber ich habe das falsche Ergebnis:

SELECT COUNT(c.CustomerID) as count_employees 
FROM Orders od 
JOIN Customers c 
ON od.OrderTypeID = c.OrderTypeID 
WHERE od.Completion_needed > c.Order_completed 

I 1 erhalten; aber ich sollte die Anzahl von 2 bekommen.

+0

was meinst du mit nicht abgeschlossene Bestellung hier? –

+0

Sind das die echten Tabellen? Ich sehe keine CustomerID in der ersten, wie funktioniert der Join? – dman2306

+0

@ dman2306 Sorry, ich vermisse eingegeben, wenn ich es vereinfacht, sollte es auf OrderTypeID – jeangelj

Antwort

1

Ich sehe nicht, wie Sie "1" von Ihrer Abfrage bekommen. Ich sehe es als "3". Also, ich denke, was Sie brauchen, ist COUNT(DISTINCT):

SELECT COUNT(DISTINCT c.CustomerId) 
    FROM Orders od JOIN 
     Customers c 
     ON od.OrderTypeID = c.OrderTypeID 
    WHERE c.Order_completed < od.Completion_needed; 
+0

danke - brauche ich nicht eine Bestellung von, wenn ich eine Gruppe mache oder brauche ich eine Gruppe, wenn ich eine Bestellung mache? – jeangelj

+0

@jeangelj. . . Die 'GROUP BY' wurde versehentlich dort gelassen. –

Verwandte Themen