2017-01-20 7 views
2

Ich bin neu mit SQL und ich möchte etwas Hilfe.Finden Sie die Anzahl der Bestellungen jedes Jahr

Ich benutze MSSQL (Northwind Datenbank).

Wie ist es möglich, alle Bestellungen eines jeden Jahres zu erhalten?

Ich weiß, wie jedes Jahr von den Auftragsdaten zu bekommen, aber ich habe keine Ahnung, wie darauf, die Gesamtzahl der Bestellungen pro Jahr zu nähern:


SELECT datepart(year,o.OrderDate) 
FROM Orders o 
    JOIN [Order Details] od ON o.OrderID = od.OrderID 
    group by datepart(year,o.OrderDate) 

Kann mir jemand sagen, wo sie suchen oder bieten etwas Hilfe?

Es gibt insgesamt drei Jahre, die als Ergebnis herauskommen (1999,1998,1997)

Es gibt insgesamt 830 Aufträge in der Datenbank.

Eine Zählung (*) produziert (691,405,1059), die weg ist.

Die Tabellen:

Tables

Edit: Der Grund, warum ich kommen bin mit, weil ich auch den kombinierten Preis aller Aufträge pro Jahr benötigen.

Danke.

+0

Einfach "count (*)'? –

+0

Sie müssen nicht mit 'OrderDetails' 'Join' gehen, nur ein' SELECT COUNT (*) FROM Bestellungen WO DATEPART (Jahr, Bestelldatum) = 2017 ' – ughai

+0

Ich bekomme zu viele Bestellungen mit count (*) – master2080

Antwort

2

Try this: Verwenden count Distinct zur Vermeidung doppelter Auftrags-IDs

SELECT COUNT(DISTINCT o.OrderID),YEAR(o.OrderDate) 
FROM Orders o 
JOIN [Order Details] od ON o.OrderID = od.OrderID 
GROUP BY YEAR(o.OrderDate) 
+1

Innerhalb von Graf klar, ich hätte es nie herausgefunden .. – master2080

0

Tun Sie einfach eine Count(*) und Ihre Gruppe von ist in Ordnung, wie es ist.

SELECT datepart(year,o.OrderDate) 
     , COUNT(*) TotalOrders 
FROM Orders o 
    JOIN [Order Details] od ON o.OrderID = od.OrderID 
    group by datepart(year,o.OrderDate) 

Sie können auch die gleiche Abfrage wie schreiben:

SELECT year(o.OrderDate) [Year] 
     , COUNT(*) TotalOrders 
FROM Orders o 
    JOIN [Order Details] od ON o.OrderID = od.OrderID 
    group by year(o.OrderDate) 

nur eine andere Datetime Funktion, sondern tut das Gleiche.

EDIt

Wenn Sie nur die Orders pro Jahr wissen wollen, brauchen Sie nicht an die Order Details Tabelle zu verbinden, gehen Sie bitte folgendermaßen:

SELECT year(o.OrderDate) [Year] 
     , COUNT(*) TotalOrders 
FROM Orders o 
group by year(o.OrderDate) 
+0

@ master2080 Schau dir jetzt die Antwort an, du musst dich nicht der 'Order Details'Tabelle anschließen. Führen Sie die Abfrage einfach nur für die Tabelle "Bestellungen" aus. –

+0

Bearbeitete den Hauptbeitrag, der erklärt, warum ich es brauche. – master2080

Verwandte Themen