[MS SQL] Wochentags-Statistik

UseTheSource

Grünschnabel
Hallo allerseits

Ich arbeite zur Zeit an einem Java-Applet, das gewisse Daten aus einer MS SQL-Datenbank auslesen und Statistiken daraus erstellen soll. Das läuft schon recht gut, so wird z.B. ausgewertet, wie die Verteilung der Ereignisse auf die einzelnen Wochentage ist. Allerdings werden dabei die Wochentag, an denen keine Ereignisse stattfanden nicht zurück gegeben. Für diese Tage sollte aber die Anzahl einfach Null betragen, damit sie später im Balkendiagramm trotzdem erscheinen.

Code:
SELECT COUNT(*) AS Anzahl, DATENAME(weekday, Von_Zeitpunkt) AS Wochentag 
FROM Aktions_Ereignis 
WHERE (DATEPART(week, Von_Zeitpunkt) = DATEPART(week, '20041126')) AND (YEAR(Von_Zeitpunkt) = YEAR('20041126')) 
GROUP BY DATENAME(weekday, Von_Zeitpunkt), DATEPART(weekday, Von_Zeitpunkt) 
ORDER BY DATEPART(weekday, Von_Zeitpunkt);
Rückgabe dieser Abfrage wäre (hier fehlen wie gesagt Freitag, Samstag und Sonntag):
Code:
831   |   Montag
783   |   Dienstag
39    |   Mittwoch
40    |   Donnerstag
Ich hoffe jemand kann mir weiter helfen und möchte mich schon mal im Voraus bei euch bedanken.
 
Erstmal herzlichen Dank für die Antwort. Allerdings komm ich immer noch nicht drauf, wie ich das am besten machen soll. Für ISNULL() und CASE bräuchte ich ja, wenn ich das richtig verstanden habe, Werte die ich vergleichen kann. Aber die sind ja gar nicht vorhanden, da nur diejenigen Zeilen zurückgeben werden, die auch gruppiert werden können.
 
Zuletzt bearbeitet:
Wie wäre es mit einer Hilfstabelle Wochentage? Also in der Art:

CREATE TABLE Wochentage (TagNr Int NOT NULL, TagName varchar (10) NOT NULL)
INSERT INTO Wochentage (TagNr, TagName) VALUES (1, 'Montag')
INSERT INTO Wochentage (TagNr, TagName) VALUES (2, 'Dienstag')
INSERT INTO Wochentage (TagNr, TagName) VALUES (3, 'Mittwoch')
INSERT INTO Wochentage (TagNr, TagName) VALUES (4, 'Donnerstag')
INSERT INTO Wochentage (TagNr, TagName) VALUES (5, 'Freitag')
INSERT INTO Wochentage (TagNr, TagName) VALUES (6, 'Samstag')
INSERT INTO Wochentage (TagNr, TagName) VALUES (7, 'Sonntag')

Und deine Query paßt du dann so an:
SELECT COUNT (e.*) AS Anzahl, w.Tagname AS Wochentag
FROM Wochentage w LEFT JOIN Aktions_Ereignis e ON w.TagNr = DATEPART(weekday, e.Von_Zeitpunkt)
WHERE (DATEPART(week, ISNULL (Von_Zeitpunkt, '20041126')) = DATEPART(week, '20041126')) AND (YEAR, (ISNULL (Von_Zeitpunkt, '20041126')) = YEAR('20041126'))
GROUP BY w.TagNr, w.TagName
ORDER BY w.TagNr
 
Gerade fiel mir noch etwas deutlich simpleres ein:

Ohne Hilfstabelle, deine Query bleibt (fast) wie sie ist und du änderst nur die Group By clause wie folgt:

GROUP BY ALL DATENAME(weekday, Von_Zeitpunkt), DATEPART(weekday, Von_Zeitpunkt)
 
Herzlichen Dank, das ist genau was ich gesucht habe! Hätte wirklich nicht gedacht, dass es so einfach ist, aber man lernt ja nie aus ;)

MfG UseThe Source
 

Neue Beiträge

Zurück