2012-12-19 2 views
5

ich meinen Kopf gegen etwas bin zu schlagen, die, ich bin sicher, sehr offensichtlich -mit Datumsteil() mit der Gruppe, die durch Befehl

Ich habe ein bisschen von SQL-Code entwickelt, um den Gesamtverkaufspreis von jeweils zusammenzuzufassen Rechnung in meinem Geschäft und dann organisieren es nach Monat.

select SUM(totalsellingprice) from dbo.tblServiceOrders 
where datepart(MONTH,dbo.tblServiceOrders.datereceived) =12 

Soweit ich es verstehe, dass sollte die Summe aller totatlsellingprice von Monat 12 (Dezember) zurück. Zurzeit wird diese Abfrage

135998.92 

jedoch zurück, wenn ich dann, dass in einer Gruppe zu setzen versuchen, indem sie sie, um es für alle Monate auszuspucken, ändert sich die Zahl.

select SUM(totalsellingprice) from dbo.tblServiceOrders 
group by datepart(MONTH,dbo.tblServiceOrders.datereceived) 

Und ich bekomme diese Tabelle -

1 - 110567.70 
2 - 60059.59 
3 - 135998.92 
4 - 63089.22 
5 - 102287.01 
6 - 71088.68 
7 - 149102.10 
8 - 67722.65 
9 - 67122.45 
10 - 64234.82 
11 - 7542.05 
12 - 130461.10 

gibt es 12 Zeilen, die mir gut klingt (12 Monate in einem Jahr), aber die letzte Zeile ist 130461.

Wie ist ist es möglich, dass Zeile 12 von der zweiten Suche nicht gleich ist, was ich bei der ersten Suche gemacht habe? Ich habe das Gefühl, dass ich etwas offensichtlich vermisse, aber ich kann nicht für das Leben von mir herausfinden, was.

Alle und alle Hilfe wird sehr geschätzt!

+0

Können Sie mir den Datentyp und das Format der Spalte "dateceived" mitteilen? – Mari

+1

Scheint mir gut ... vielleicht wurde jemand für 5537,82 $ verkauft, wenn Sie die Abfrage mit dem 'where' ausführen? (laf) –

Antwort

13

ich es bekommen habe:

Ihre Anfrage ist sehr verwirrend, da es nicht die MONAT Spalte enthält:

Wenn Sie Haben Sie das getan, hätten Sie erkannt, dass Ihre Abfrage nicht nach MONTH sortiert ist. Daher wird MONTH 12 als dritte Zeile Ihrer Abfrage zurückgegeben.

;)

select SUM(totalsellingprice) from dbo.tblServiceOrders 
group by datepart(MONTH,dbo.tblServiceOrders.datereceived) 
order by datepart(MONTH,dbo.tblServiceOrders.datereceived) 

Und bitte, beziehen sich nicht auf den Zeilenindex zu wählen, welche Monat bezogen auf die Summe. Und sollte eine gute Idee sein, auch das Jahr zu diskriminieren (wenn Sie müssen).

+0

Haha. Oh Mann. Ich habe mich am Kopf gekratzt, um herauszufinden, ob ich an ein Szenario denken konnte, bei dem GROUP BY Reihen eliminierte ... – DeanGC

+0

+1 für die Erwähnung des Jahres –

+0

@DeanGC: Hahaha ich auch, habe eine Menge Tests gemacht! >, <' –

0

Führen Sie dieses und sehen, was es tut ...

select dateadd(month, datediff(month, 0, datereceived), 0), 
     Sum(totalsellingprice) 
from dbo.tblServiceOrders 
group by dateadd(month, datediff(month, 0, datereceived), 0) 
Verwandte Themen