bluejet
Goto Top

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

Content-ID: 283879

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

Ausgedruckt am: 24.11.2024 um 08:11 Uhr

MadMax
Lösung MadMax 25.09.2015 aktualisiert um 12:31:38 Uhr
Goto Top
Moin Bluejet,

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
Bluejet
Bluejet 25.09.2015 um 12:32:22 Uhr
Goto Top
Das war es, muss ich mir für die Zukunft unbedingt aneignen!

Vielen Dank! face-smile
ukulele-7
ukulele-7 28.09.2015 um 08:01:50 Uhr
Goto Top
Also eleganter fände ich ja:
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