MS SQL - Zwei Summierungen (für Vergleich) in einer Abfrage möglich?
Hallo zusammen,
es ist sicher ein einfaches Unterfangen, jedoch weiß ich nicht, wie ich es im Moment lösen soll...
Um folgendes geht es: in einer Tabelle, die Kundennummern, Umsätze und ein entsprechendes Datum bereitstellt, möchte ich eine kleine Auswertung erstellen.
Nämlich: wie ist der Umsatz eines Kunden im ersten Halbjahr 2014 und wie 2015? Dies möchte ich nach der Kundennummer gruppiert haben und den Umsatz der beiden Zeiträume nebeneinander.
Den Umsatz für einen Zeitraum darzustellen, ist kein Problem:
SELECT [KundenNr]
,SUM([Betrag]) as Betrag_2015
FROM [Tabelle]
AND AbrDatum in('01.2015', '02.2015', '03.2015', '04.2015', '05.2015', '06.2015')
GROUP BY KundenNr
Wie ich jedoch den 2014er-Zeitraum "anhängen" kann, stellt mich im Moment vor ein Problem. Es wäre super, wenn mir hier jemand helfen könnte!
Viele Grüße
es ist sicher ein einfaches Unterfangen, jedoch weiß ich nicht, wie ich es im Moment lösen soll...
Um folgendes geht es: in einer Tabelle, die Kundennummern, Umsätze und ein entsprechendes Datum bereitstellt, möchte ich eine kleine Auswertung erstellen.
Nämlich: wie ist der Umsatz eines Kunden im ersten Halbjahr 2014 und wie 2015? Dies möchte ich nach der Kundennummer gruppiert haben und den Umsatz der beiden Zeiträume nebeneinander.
Den Umsatz für einen Zeitraum darzustellen, ist kein Problem:
SELECT [KundenNr]
,SUM([Betrag]) as Betrag_2015
FROM [Tabelle]
AND AbrDatum in('01.2015', '02.2015', '03.2015', '04.2015', '05.2015', '06.2015')
GROUP BY KundenNr
Wie ich jedoch den 2014er-Zeitraum "anhängen" kann, stellt mich im Moment vor ein Problem. Es wäre super, wenn mir hier jemand helfen könnte!
Viele Grüße
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 283879
Url: https://administrator.de/forum/ms-sql-zwei-summierungen-fuer-vergleich-in-einer-abfrage-moeglich-283879.html
Ausgedruckt am: 26.12.2024 um 14:12 Uhr
3 Kommentare
Neuester Kommentar
Moin Bluejet,
Gruß, Mad Max
select IsNull (t15.KundenNr, t14.KundenNr), t15.Betrag_2015, t14.Betrag_2014
from (SELECT [KundenNr], SUM([Betrag]) as Betrag_2015 FROM [Tabelle] where AbrDatum in('01.2015', '02.2015', '03.2015', '04.2015', '05.2015', '06.2015') GROUP BY KundenNr) t15
full join (SELECT [KundenNr], SUM([Betrag]) as Betrag_2014 FROM [Tabelle] where AbrDatum in('01.2014', '02.2014', '03.2014', '04.2014', '05.2014', '06.2014') GROUP BY KundenNr) t14 on t14.KundenNr = t15.KundenNr
Gruß, Mad Max
Also eleganter fände ich ja:
oder eine Lösung mit PIVOT wenn es mehr als 2 Jahre werden. Nutzt jetzt natürlich Datumsfunktionen, wenn das Datum Text ist muss man eben anders vorgehen:
SELECT KundenNr,
sum( CASE WHEN datepart(yyyy,AbrDatum) = 2015 THEN Betrag ELSE 0 END ) AS Betrag_2015,
sum( CASE WHEN datepart(yyyy,AbrDatum) = 2014 THEN Betrag ELSE 0 END ) AS Betrag_2014
FROM Tabelle
WHERE datepart(yyyy,AbrDatum) IN ( 2014,2015 )
AND datepart(mm,AbrDatum) BETWEEN 1 AND 6
GROUP BY KundenNr
oder eine Lösung mit PIVOT wenn es mehr als 2 Jahre werden. Nutzt jetzt natürlich Datumsfunktionen, wenn das Datum Text ist muss man eben anders vorgehen:
SELECT KundenNr,
sum( CASE WHEN right(AbrDatum,4) = '2015' THEN Betrag ELSE 0 END ) AS Betrag_2015,
sum( CASE WHEN right(AbrDatum,4) = '2014' THEN Betrag ELSE 0 END ) AS Betrag_2014
FROM Tabelle
WHERE right(AbrDatum,4) IN ( '2014','2015' )
AND cast(left(AbrDatum,2) AS SMALLINT) BETWEEN 1 AND 6
GROUP BY KundenNr