Szenarienvergleich mit einem Join. Elementliste darf nicht eingeschränkt werden.

Ramki

Benutzer
Beiträge
8
Hallo zusammen,

ich komme bei einem Problem nicht weiter. Ich habe eine Liste von Ländern. Meine Abfrage soll
die Umsätze nach Land für 2 verschiedene Szenarien abrufen (Budget, 2016, Monat 2 / Actual 2016
Monat 2), nebeneinander stellen und auch gleich die Abweichung mitliefern.

Mein Problem: So, wie ich die Abfrage aufgebaut habe, wird die Länderliste bereits auf das erste Szenario
eingeschränkt. Somit ist die Länderliste nicht vollständig und Länder, die nur im zweiten Szenario Umsätze
hätten, werden nicht angezeigt. Damit passt die Gesamtsumme des 2. Szenarios nicht.

Dass sich meine Abfrage so verhält, ist für mich noch logisch nachvollziehbar. Allerdings fehlt mir die Idee,
wie ich das umbauen kann, damit die Länderliste definitiv immer komplett ist und nicht eingeschränkt wird.

Hier mal meine Abfrage, die ich zur besseren Lesbarkeit mal ein wenig auseinander gezogen habe.
Wäre klasse, wenn ihr mir helfen könnt.

Danke,
Ramki

Select s1.[Country],
s1.x as Scenario1,
s2.x as Secanrio2,
(s2.x-s1.x) as diff

from(

select [Country], sum([Net Sales 3rd Party]) as x from [base_data$] where Scenario = ('Budget') and Year = ('2016') and Month IN ('2') group by [country])

s1 left join (

select [Country], sum([Net Sales 3rd Party]) as x from [base_data$] where Scenario = ('Actual') and Year = ('2016') and Month IN ('2')group by [Country])

s2 on s1.[Country] = s2.[Country] order by (s1.x-s2.x) asc
 
Werbung:
Also mir fallen da erstmal zwei sinnvolle Wege mit Join ein. Entweder du holst erst nur eine Liste mit allen Ländern und joinst dann zwei mal per LEFT JOIN deine Summen dazu. Oder du nimmst einen FULL OUTER JOIN, zugegeben den nutze ich auch selten müsste aber gehen.

Alternativ würde ich CASE nutzen, das ist meines erachtens am kürzesten:
Code:
SELECT   t.[Country],
     t.Scenario1,
     t.Scenario2,
     t.Scenario1 - t.Scenario2 AS diff
FROM   (

SELECT   [Country],
     sum( CASE WHEN Scenario = 'Budget' THEN [Net Sales 3rd Party] ELSE 0 END) AS Scenario1,
     sum( CASE WHEN Scenario = 'Actual' THEN [Net Sales 3rd Party] ELSE 0 END) AS Scenario2
FROM   [base_data$]
WHERE   [Year] = '2016'
AND     [Month] IN ( '2' )
GROUP BY [Country]

     ) t
ORDER BY t.Scenario1 - t.Scenario2 ASC
Ich habe jetzt noch mit einem Subselect gearbeitet, das macht das Rechnen mit Scenario1 und 2 leichter, man kann das aber auch direkt im ersten Select mit einer längeren Rechnung machen.
 
Werbung:
Zurück
Oben