Unter der Annahme, dass die Spalte ganze Zahl ist, da Integer-Division in SQL Server das Ergebnis abschneidet, alles, was Sie tun müssen, ist die unteren vier Ziffern Teilung aus:
SELECT
datefield/10000 AS Year
, SUM(...) AS ...
FROM MyTable
WHERE ...
GROUP BY datefield/10000
Wenn Ihr Spalte ist ein Char oder Varchar, verwenden Sie stattdessen LEFT(datefield,4)
.
Hinweis: Ich gehe davon aus, dass Sie nicht die Tabelle besitzen, so ist die Umstellung auf einen geeigneteren Typ (d. H. date
) keine Option. Andernfalls würde ich einen Switch dringend empfehlen, weil date
kleiner ist, und es gibt Ihnen auch Zugriff auf datumsspezifische Funktionen, wie das Extrahieren des Tages, des Monats und des Jahres.
Mögliches Duplikat [Wie kann ich tun \ 'Gruppe von \' teilweise Übereinstimmung] (http://stackoverflow.com/questions/5977506/how-do-i-do-group-by-partial- match) – CodeCaster
Oder wenn sie tatsächlich Datum sind: [Wie man nach Jahr gruppiert] (http://stackoverflow.com/questions/5964094/how-to-group-by-year) – CodeCaster
Lesen Sie Aaron Bertrands [schlechte Angewohnheiten zu treten : Wählen des falschen Datentyps] (http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/12/bad-habits-to-kick-using-the-wrong-data-type.aspx) –