2017-04-07 3 views
1

Leute,Poping Time Dimension mit SQL-Skript - Teradata

Ich versuche, eine Zeitdimensionstabelle mit SQL-Skript zu füllen.

Etwas wie unten ist erwartet Ausgabe.

enter image description here

& unten ist der Teil-SQL-Skript, das ist nicht die richtige Ausgabe zu geben.

Könnten Sie mir bitte helfen, das Problem in meinem Code zu finden?

Da der Code bei Month_Key Bevölkerung stucked ist, ich bin nicht mit dem remaing Code getan ...

+0

Was genau ist falsch? Sind Sie besorgt über Rang überspringen Zahlen oder etwas anderes? – Andrew

Antwort

0

ändern RANK() OVER (ORDER BY EXTRACT(MONTH FROM CALENDAR_DATE)) AS Month_KeyDENSE_RANK zu verwenden, da es wie alle Zeilen für einen Monat in einem Jahr aussieht sollte die gleiche haben Schlüssel.

SEL calendar_date AS DATE_, 
    RANK() OVER (ORDER BY calendar_date) AS Date_Key, 
    DENSE_RANK() OVER (ORDER BY EXTRACT(YEAR FROM CALENDAR_DATE),EXTRACT(MONTH FROM CALENDAR_DATE)) AS Month_Key 
FROM SYS_CALENDAR.CALENDAR 
ORDER BY calendar_Date 
1

Ich sehe den Punkt nicht für diese, wenn Sie sys_calendar.calendar haben

select  calendar_date 

      ,day_of_calendar  - 32872  as day_key 
      ,month_of_calendar - 1080  as month_key 
      ,quarter_of_calendar - 360  as quarter_key 
      ,year_of_calendar - 1989  as year_key 

from  sys_calendar.calendar 

-- where  calendar_date between date '2015-09-25' and date '2015-10-05' 

-- order by calendar_date 

+---------------+---------+-----------+-------------+----------+ 
| calendar_date | day_key | month_key | quarter_key | year_key | 
+---------------+---------+-----------+-------------+----------+ 
| 2015-09-25 | 9,399 |  309 |   103 |  26 | 
| 2015-09-26 | 9,400 |  309 |   103 |  26 | 
| 2015-09-27 | 9,401 |  309 |   103 |  26 | 
| 2015-09-28 | 9,402 |  309 |   103 |  26 | 
| 2015-09-29 | 9,403 |  309 |   103 |  26 | 
| 2015-09-30 | 9,404 |  309 |   103 |  26 | 
| 2015-10-01 | 9,405 |  310 |   104 |  26 | 
| 2015-10-02 | 9,406 |  310 |   104 |  26 | 
| 2015-10-03 | 9,407 |  310 |   104 |  26 | 
| 2015-10-04 | 9,408 |  310 |   104 |  26 | 
| 2015-10-05 | 9,409 |  310 |   104 |  26 | 
+---------------+---------+-----------+-------------+----------+ 
+0

Im Grunde versuche ich eine Zeitdimension mit SQL-Skript zu erstellen, die auch für Teradata & SQL Server nützlich sein wird (obwohl geringfügige Syntaxänderungen im Skript erforderlich sind) .... In der angegebenen Antwort bin ich mir nicht sicher, warum Sie das sind Zahlen von Spalten subtrahieren? Beispiel: - day_of_calendar - 32872 as day_key – Aditya

+0

Die Teradata-Kalendertabelle beginnt am 01.01.1900. Die Subtraktion ist notwendig, um sie an die von Ihnen gewünschten Ergebnisse anzupassen –