Kompliziertes SELECT INTO INNER JOIN mit Zeit-Dimension?

dr.evil

Benutzer
Beiträge
5
Hallo,
entweder stehe ich aktuell auf dem Schlauch oder das was ich vorhabe ist kompliziert. Daher suche ich Rat :)
Ich habe eine SQL-Datenbank, welche ich in ein Snowflake-Schema überführen möchte

Die Abfrage für die Erstellung der Faktentabelle funktioniert auch:
Code:
SELECT KundeID, LieferantID,... BestellDatum, LieferDatum INTO Snowflake FROM Bestellung INNER JOIN Bestelldetails ON....
Nun würde ich gerne obige Abfrage so umbauen das ich sie mit einer Zeit-Dimension verknüpfen kann.
Zeit-Dimension enthält DateID, Datum, Tag, Monat, Jahr,...
Sprich es soll das Bestelldatum genommen werden. In der Zeitdimension das passende gleiche Datum und deren dazugehörige DateID finden. Diese DateID soll dann für das Bestelldatum in meine Faktentabelle geschrieben werden. Das gleiche gilt für das Lieferdatum.

Hoffe mich soweit verständlich ausgedrückt zu haben.
 
Werbung:
Hi,

die Verknüpfung zur Zeit-Dimension kannst du direkt über das Datum vornehmen:

Code:
 ...
INNER JOIN dimZeit
    ON CONVERT(varchar(25), dimZeit.Datum, 112)=CONVERT(varchar(25),Bestellung.Bestelldatum, 112)

Die Convert-Funktion habe ich nur genutzt, um evtl. Ablagen eines Datums mit Zeitangaben abzufangen und dennoch eine korrekte Datums-Zuordnung zu haben.

Den gleichen JOIN mußt du für das Lieferdatum dann ebenfalls noch auf die Zeit-Dimension vornehmen.
Voraussetzung für das Funktionieren dieses Joins ist jedoch, dass die Datums-Anbagen auch im datetime-Datentyp abgelegt sind!


Viele Grüße,
Tommi
 
Werbung:
Danke ich hatte es gestern Abend noch hinbekommen. :) Ich musste Correlation Names verwenden. Auf die Idee bin ich die ganze Zeit nicht gekommen.

Code:
SELECT KundeID, LieferantID,... DT1.Day AS BestellKEY , D2.Day AS LieferKEY INTO Snowflake FROM Bestellung INNER JOIN Bestelldetails ON....INNER JOIN DimZeit AS D1 ON BestellDatum = D1.Day INNER JOIN Bestelldetails AS D2 ON Lieferdatum = D2.Day
 
Zurück
Oben