verwendetes Datenbanksystem: MS SQL.
Hallo liebes Forum, eigentlich dachte ich, dass ich mich mit SQL ganz gut auskenne, aber im Moment stehe ich auf dem Schlauch.
Ich möchte eine Auswertung machen, die mir eine Anzahl nach Jahr, Monat und Tag geordnet ausgibt.
Das an sich ist kein Problem und funktioniert.
Nun gibt es in der Tabelle ein Feld "storno". Die Anzahl dieser sollte ich pro Tag abziehen.
Also z.B. Anzahl am 22.9.: 135, 3x storno = 132.
Das sollte möglichst in einem SQL Aufruf geschehen, dazu habe ich verschiedene Versuche gemacht, keines geht aber.
Alternativen willkommen.
Also hier das Script, Anzahl pro Jahr, Monat und Tag:
SELECT km.Monat, km.Tag, COUNT(km.tag)
FROM [datenbank] as km
where km.ausweisnr <> '0001234567'
GROUP BY km.Monat,km.Tag
order by km.monat, km.tag
Hier das Script, welches die Stornos ausgibt:
SELECT COUNT(tag)*2
FROM [datenbank]
where ausweisnr <> '0001234567' and Storno =1
GROUP BY Monat,Tag
order by monat, tag
Gesamtes habe ich bereits so implementiert:
SELECT km.Monat, km.Tag, COUNT(km.tag)-(
SELECT COUNT(tag)*2
FROM [datenbank]
where ausweisnr <> '0001234567' and Storno =1
GROUP BY Monat,Tag
)
FROM [datenbank] as km
where km.ausweisnr <> '0001234567'
GROUP BY km.Monat,km.Tag
order by km.monat, km.tag
Geht natürlich nicht, da es mehrere Rückgaben gibt.
Aber wie geht es dann? Wie kann ich im inneren Select den Bezug zum aktuelle Jahr/Monat/Tag zum äußeren Select herstellen?
Geht das überhaupt so?
Vielen Dank im Voraus.
Edit:
Weiterer Versuch:
SELECT km.Monat, km.Tag, COUNT(km.tag)-(
SELECT COUNT(tag)*2
FROM [datenbank]
where ausweisnr <> '0001234567' and Storno =1
and km.Monat = Monat and km.Tag = tag
GROUP BY Monat,Tag
)
FROM [datenbank] as km
where km.ausweisnr <> '0001234567'
GROUP BY km.Monat,km.Tag
order by km.monat, km.tag
So läuft es, aber in der COUNT Spalte kommt oft NULL, bei wenigen kommt ein Zahlenwert...
Edit:
GROUP BY muss natürlich noch weg... dann gehts 😃
SELECT km.Monat
,km.Tag
,COUNT(km.tag) - (
SELECT COUNT(tag) * 2
FROM [datenbank]
WHERE ausweisnr <> '0001234567'
AND Storno = 1
AND monat = km.Monat
AND tag = km.Tag
)
FROM [datenbank] AS km
WHERE km.ausweisnr <> '0001234567'
GROUP BY km.Monat
,km.Tag
ORDER BY km.monat
,km.tag
So in etwa?