mist
Goto Top

SQL-SELECT-Frage

Hallo,
ich versuche mich ab und an mit SQL. Und nun stehe ich vor einem kl. Problem, welches ich mit Google nicht lösen kann.

Beispiel:

SELECT SUM(betrag) AS "Betrag"  
FROM rechnungen
WHERE year(betrag) = year(curdate())-1

Das zeigt mir den Betrag aller Rechnungen vom letzten Jahr auf. Mit -2, den von vor 2 Jahren.
Jetzt möchte ich gerne, dass beide Beträge, -1 und -2, nebeneinander stehen.

Das was ich im WWW über "sql 2 selects verbinden" gefunden habe, verstehe ich irgendwie nicht.

Hätte da jemand 1,2 Tipps?

VG
Michael

Content-ID: 467982

Url: https://administrator.de/contentid/467982

Ausgedruckt am: 24.11.2024 um 18:11 Uhr

emeriks
emeriks 01.07.2019 um 14:31:27 Uhr
Goto Top
Hi,
hm, so?
Select 
  (SELECT SUM(betrag)
  FROM rechnungen
  WHERE year(betrag) = year(curdate())-1) AS [Betrag-1], 
  (SELECT SUM(betrag)
   FROM rechnungen
   WHERE year(betrag) = year(curdate())-2) AS [Betrag-2]

E.
TheJoker2305
Lösung TheJoker2305 01.07.2019 aktualisiert um 15:27:59 Uhr
Goto Top
Hallo,

welche Daten sind im Feld betrag gespeichert? Eine Zahl oder ein Datum?

Wenn das Datum und der Betrag in getrennten Feldern gespeichert sind, dann ist es so kürzer und leichter erweiterbar.
Ist zwar von T-SQL adaptiert, aber sollte auch in anderen SQL-Dialekten laufen.

SELECT 
	sum(case when year(datum) = year(curdat())-2 then betrag else 0 end) as vorvorjahr,
	sum(case when year(datum) = year(curdat())-1 then betrag else 0 end) as vorjahr,
	sum(case when year(datum) = year(curdat()) then betrag else 0 end) as aktjahr
FROM rechnungen
 

Greetz
thejoker2305
MiSt
MiSt 01.07.2019 um 14:55:02 Uhr
Goto Top
Zitat von @TheJoker2305:

Hallo,

welche Daten sind im Feld betrag gespeichert? Eine Zahl oder ein Datum?
Eine Zahl

Wenn das Datum und der Betrag in getrennten Feldern gespeichert sind, dann ist es so kürzer und leichter erweiterbar.
Ist zwar von T-SQL adaptiert, aber sollte auch in anderen SQL-Dialekten laufen.

> SELECT 
> 	sum(case when year(datum) = year(curdat())-1 then betrag else 0 end) as vorjahr,
> 	sum(case when year(datum) = year(curdat()) then betrag else 0 end) as aktjahr
> FROM rechnungen
>  
> 

Greetz
thejoker2305
TheJoker2305
TheJoker2305 01.07.2019 um 15:26:36 Uhr
Goto Top
Hallo,

funktioniert die Abfrage wie gewünscht?

Greetz
thejoker2305
MiSt
MiSt 02.07.2019 aktualisiert um 06:13:13 Uhr
Goto Top
Guten Morgen,

Zitat von @TheJoker2305:

Hallo,

funktioniert die Abfrage wie gewünscht?

Greetz
thejoker2305
Sorry, mir ist gestern noch was dazwischen gekommen.
Vielen vielen Dank, das SELECT läuft echt prima.

Ich habe das auch mal auf den Tag vom Vorjahr runter gebrochen.
...
WHEN YEAR(datum) = YEAR(curdate()) - 1
   AND MONTH(datum) = MONTH(curdate())
   AND DAY(datum) = DAY(curdate())
...
Kann man das so machen oder gibt es da einen eleganteren Weg?

VG
TheJoker2305
TheJoker2305 03.07.2019 um 11:51:39 Uhr
Goto Top
Guten Morgen,

ja, gibt es. DATEADD

Dies ergibt den heutigen Tag vorm Vorjahr (hier T-SQL).
 select dateadd(year, -1,GETDATE())



Hier mit mysql:
DATE_ADD(CURRENT_DATE, INTERVAL -1 YEAR)

Greetz
thejoker2305
MiSt
MiSt 03.07.2019 um 20:03:35 Uhr
Goto Top
Danke. Werde ich mir mal anschauen. Wir nutzen eine Sybase-DB.