2016-06-26 8 views
1

Ich bin ein Informatikstudent arbeitet an einer Hausaufgabe. Ich versuche, die Anzahl der Bestellungen für jeden Verkäufer zusammenzufassen. Ich möchte, dass meine endgültige Ausgabe den Namen des Verkäufers anzeigt, zusammen mit der Anzahl der Aufträge, die er/sie erhält.SQL - Count Gesamtzahl der Aufträge von Verkäufer

Die Informationen werden in zwei separaten Tabellen gespeichert.

Beispieldaten.

Tabelle 1 - order_t

OrderID CustomerID OrderDate FulfillmentDate SalespersonID ShipAdrsID 
1 4 2014-09-08 2014-11-25 3 NULL 
2 3 2014-10-04 0000-00-00 3 NULL 
3 1 2014-07-19 0000-00-00 2 NULL 
4 6 2014-11-01 0000-00-00 5 NULL 
5 4 2014-07-28 0000-00-00 3 NULL 
6 4 2014-08-27 0000-00-00 3 NULL 
7 1 2014-09-16 0000-00-00 2 NULL 
8 4 2014-09-16 0000-00-00 3 NULL 
9 6 2014-09-16 0000-00-00 5 NULL 

Tabelle 2 - salesperson_t

SalespersonID SalespersonName 
1 "Doug Henny"  
2 "Robert Lewis" 
3 "William Strong"  
4 "Julie Dawson" 

Hier ist meine letzte Abfrage. Das Problem ist, dass nur Daten für einen einzelnen Verkäufer zurückgegeben werden, der die ID 2 hat. Ich habe keine Ahnung, warum das passiert.

SELECT SalespersonName, COUNT(DISTINCT order_t.SalespersonID) AS TotalOrderQuantity 
FROM salesperson_t, order_t 
WHERE salesperson_t.SalespersonID = order_t.SalespersonID; 
+2

Sie sind, können Sie eine Gruppe fehlt verwenden alte Join-ish-Syntax, die niemand mehr verwenden sollte – Drew

+1

Sie müssen loswerden (distinct). Sie möchten die Anzahl der Verkäufer-IDs in der Tabelle order_t angeben. Das gibt Ihnen die Anzahl der Bestellungen. Wenn also fünf '3' in der Auftragstabelle vorhanden sind, möchten Sie, dass sie alle in Ihrer Gruppe zusammengefasst sind. Graf distinct ist dafür unnötig und wird das wahrscheinlich vermasseln. Außerdem bin ich überrascht, dass Ihre Anfrage funktioniert, weil Sie nicht auf SalesPersonName gruppiert sind (dh nach der Where-Klausel "Gruppe nach SalesPersonName" hinzugefügt. – kermit

Antwort

2

Sie benötigen einen group by Klausel verwenden

SELECT SalespersonName, COUNT(order_t.SalespersonID) AS TotalOrderQuantity 
FROM salesperson_t join order_t on (ordert_t.SalespersonID = salesperson_t.SalespersonID) 
group by order_t.SalespersonID 
+0

Danke Vlad, das hat perfekt funktioniert! – Brent

+0

@Brent Wenn eine Antwort Ihr Problem gelöst hat, Sie können es zeigen und geben Sie die Reputation durch Klicken auf das Symbol akzeptieren PS Während "Danke" Kommentare werden abgeraten. – philipxy

+0

@Brent, auch, überprüfen Sie Hilfe -> Tour für Site-Etikette. Markieren Fragen als gelöst helfen anderen zu wissen was DID funktioniert, und auch gelöst, damit andere nicht versuchen müssen, mehr Antworten anzubieten, wenn sie bereits gelöst sind. – DRapp

1

ich die Verwendung von inneren vorschlagen verbinden und COUNT (*) mit einer Gruppe von

SELECT SalespersonName, COUNT(*) AS NumberOfOrder 
FROM salesperson_t 
INNER JOIN order_t on (ordert_t.SalespersonID = salesperson_t.SalespersonID) 
GROUP BY order_t.SalespersonID 
ORDER BY order_t.SalespersonID