2017-04-04 11 views
0

Ich habe 3 Tabellen mit Daten und ich muss die Summe der Verkäufe (SalesAmount) pro Land (CountryRegionName) im Geschäftsjahr 2014 (FiscalYear) auswählen.SQL: Wie komplexe Abfrage von 3 Tabellen erstellen

Die erste Tabelle ist Geography.

Es gibt Daten mit CountryRegionName und auch SalesTerritoryKey (Nummer, die einige Bezirke von CountryRegionName bedeutet).

Die zweite Tabelle enthält Informationen zu OrderDateKey, SalesTerritoryKey und SalesAmount. Das Feld OrderDateKey enthält Datensätze im folgenden Format: "20130828".

Die dritte Tabelle unter anderem hat Felder DateKey (im gleichen Format wie OrderDateKey aus dem zweiten Tabelle und FiscalYear (Format wie:. „2012“)

ich dont't verstehen, wie ich benötigten Daten auswählen kann . unter Verwendung aller drei Tabellen, weil zweite Tabelle Informationen über Jahr (OrderDateKey) in verschiedenem Format, die dritte Tabelle FiscalYear in Feld unterstützt

Zur Zeit habe ich aufgehört, die nach Aussage:

`SELECT CountryRegionName, SUM(SalesAmount) FROM FirstTable GROUP BY SalesTerritoryKey` 

Ich weiß, dass wir alle Tabellen verbinden müssen und einige Unterabfragen machen müssen, aber nicht verstehen, wie man Datumsangaben und Länder in verschiedenen Formaten vergleicht. Danke für Ihre Hilfe!

+0

Beschreiben Sie nicht die Tabellen. Fügen Sie den Code ein, um die Tabellen zu erstellen und die Beispieldaten zu füllen. – dfundako

+0

Oder zumindest eine formatierte Tabelle in Ihrer Frage, die es zeigt. – SandPiper

Antwort

0
SELECT t1.CountryRegionName, SUM(t2.SalesAmount) 
FROM ThirdTable t3 
LEFT JOIN SecondTable t2 
ON t3.DateKey = t2.OrderDateKey 
LEFT JOIN FirstTable t1 
ON t1.SalesTerritoryKey = t2.SalesTerritoryKey 
WHERE t3.FiscalYear = "2014" 
GROUP BY t1.CountryRegionName 
+0

Warum verwenden Sie LEFT JOIN, aber nicht INNER JOIN? –

+0

weil, wenn Sie 2014 Geschäftsjahr in Tabelle3 haben, aber keine Daten in anderen haben, erhalten Sie immer noch leere Ergebnis. aber wenn Sie innere Verbindung setzen - Sie erhalten kein Ergebnis – Alex

+0

Ich denke, dass diese Abfrage zunächst alle Daten und nur nach diesem Filter von FiscalYear, so würde es nicht dieses Problem geben? –