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-Key: 283879

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

Printed on: April 23, 2024 at 22:04 o'clock

Member: MadMax
Solution MadMax Sep 25, 2015 updated at 10:31:38 (UTC)
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
Member: Bluejet
Bluejet Sep 25, 2015 at 10:32:22 (UTC)
Goto Top
Das war es, muss ich mir für die Zukunft unbedingt aneignen!

Vielen Dank! face-smile
Member: ukulele-7
ukulele-7 Sep 28, 2015 at 06:01:50 (UTC)
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