Laden...

[gelöst] SQL Select mit Subtraktion durch ein Subselect

Erstellt von schuppsl vor 7 Jahren Letzter Beitrag vor 7 Jahren 1.710 Views
S
schuppsl Themenstarter:in
789 Beiträge seit 2007
vor 7 Jahren
[gelöst] SQL Select mit Subtraktion durch ein Subselect

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 😃

M
184 Beiträge seit 2012
vor 7 Jahren
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?

S
schuppsl Themenstarter:in
789 Beiträge seit 2007
vor 7 Jahren

Vielen Dank, habe es selbst gelöst. Siehe EDIT oben 😃