Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Kompliziertes SELECT INTO INNER JOIN mit Zeit-Dimension?

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von dr.evil, 30 Januar 2013.

  1. dr.evil

    dr.evil Benutzer

    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.
     
  2. Tommi

    Tommi Datenbank-Guru

    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
     
  3. dr.evil

    dr.evil Benutzer

    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
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden