SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS ON 
GO
CREATE VIEW [kalender].[Kalender_Dimension] AS

WITH
    [Zeit_Dimension_mit_Text]
        AS (SELECT [Datum]
                 , [Tag_im_Jahr]
                 , [Wochentag]
                 , [Wochentag_int]
                 , [Periode]
                 , [Kalenderwoche]
                 , [Quartal_int]
                 , [Datum_str]
                 , [Datum_int]
                 , [MoFr]
                 , [MoSa]
                 , [Jahr]
                 , [Quartal]
                 , [Monat]
                 , [Tag]
                 , [Heute]
                 , [Heute_Vorjahr]
                 , [Heute_Vormonat]
                 , iif([Aktueller Tag] = 1, [Tag], NULL) AS [Aktueller Tag]
                 , iif([Gestern] = 1, [Tag], NULL) AS [Gestern]
                 , iif([M bisher] = 1, [Tag], NULL) AS [M bisher]
                 , iif([M bisher Vorjahr] = 1, [Tag], NULL) AS [M bisher Vorjahr]
                 , convert(varchar(30), CASE WHEN [M bisher / M bisher VJ] = 1 THEN 'M bisher' WHEN [M bisher / M bisher VJ] = 2 THEN 'M bisher VJ' ELSE NULL END) AS [M bisher / M bisher VJ]
                 , iif([Voriger M bisher] = 1, [Tag], NULL) AS [Voriger M bisher]
                 , convert(varchar(30), CASE WHEN [M bisher gruppiert] = 1 THEN 'M bisher' WHEN [M bisher gruppiert] = 2 THEN 'Voriger M bisher' ELSE NULL END) AS [M bisher gruppiert]

                 , iif([Q bisher] = 1, [Quartal], NULL) AS [Q bisher]
                 , iif([Voriges Q bisher] = 1, [Quartal], NULL) AS [Voriges Q bisher]
                 , convert(varchar(30), CASE WHEN [Q bisher gruppiert] = 1 THEN 'Q bisher' WHEN [Q bisher gruppiert] = 2 THEN 'Voriges Q bisher' ELSE NULL END) AS [Q bisher gruppiert]
                 , iif([J bisher] = 1, [Quartal], NULL) AS [J bisher]
                 , iif([Voriges J bisher] = 1, [Quartal], NULL) AS [Voriges J bisher]
                 , convert(varchar(30), CASE WHEN [J bisher gruppiert] = 1 THEN 'J bisher' WHEN [J bisher gruppiert] = 2 THEN 'Voriges J bisher' ELSE NULL END) AS [J bisher gruppiert]

                 , iif([Aktueller Monat] = 1, [Monat], NULL) AS [Aktueller Monat]
                 , iif([Vormonat (-1)] = 1, [Monat], NULL) AS [Vormonat (-1)]
                 , iif([Vormonat (-2)] = 1, [Monat], NULL) AS [Vormonat (-2)]
                 , iif([Vormonat (-3)] = 1, [Monat], NULL) AS [Vormonat (-3)]
                 , iif([Akt. Monat Vorjahr] = 1, [Monat], NULL) AS [Akt. Monat Vorjahr]
                 , iif([Vormonat (-1) Vorjahr] = 1, [Monat], NULL) AS [Vormonat (-1) Vorjahr]
                 , iif([Vormonat (-2) Vorjahr] = 1, [Monat], NULL) AS [Vormonat (-2) Vorjahr]
                 , iif([Vormonat (-3) Vorjahr] = 1, [Monat], NULL) AS [Vormonat (-3) Vorjahr]
                 , iif([letzte 6 Monate] = 1, [Monat], NULL) AS [letzte 6 Monate]
                 , iif([letzte 12 Monate] = 1, [Monat], NULL) AS [letzte 12 Monate]

                 , iif([per Vormonat] = 1, [Quartal], NULL) AS [per Vormonat]
                 , iif([per Vormonat (-2)] = 1, [Quartal], NULL) AS [per Vormonat (-2)]
                 , iif([per Vormonat (-3)] = 1, [Quartal], NULL) AS [per Vormonat (-3)]
                 , iif([per Vormonat Vorjahr] = 1, [Quartal], NULL) AS [per Vormonat Vorjahr]
                 , iif([per Vormonat (-2) Vorjahr] = 1, [Quartal], NULL) AS [per Vormonat (-2) Vorjahr]
                 , iif([per Vormonat (-3) Vorjahr] = 1, [Quartal], NULL) AS [per Vormonat (-3) Vorjahr]

                 , iif([Aktuelles Jahr] = 1, [Jahr], NULL) AS [Aktuelles Jahr]
                 , iif([letztes Jahr] = 1, [Jahr], NULL) AS [letztes Jahr]
                 , iif([3 Monate bis Vormonat (-2)] = 1, [Monat], NULL) AS [3 Monate bis Vormonat (-2)]

                 , iif([Quartal (-1)] = 1, [Quartal], NULL) AS [Quartal (-1)]
                 , iif([Quartal (-2)] = 1, [Quartal], NULL) AS [Quartal (-2)]
                 , iif([Quartal (-3)] = 1, [Quartal], NULL) AS [Quartal (-3)]
                 , iif([Quartal (-1) Vorjahr] = 1, [Quartal], NULL) AS [Quartal (-1) Vorjahr]
                 , iif([Quartal (-2) Vorjahr] = 1, [Quartal], NULL) AS [Quartal (-2) Vorjahr]
                 , iif([Quartal (-3) Vorjahr] = 1, [Quartal], NULL) AS [Quartal (-3) Vorjahr]
                 , iif([Quartal (-1) kum.] = 1, [Quartal], NULL) AS [Quartal (-1) kum.]
                 , iif([Quartal (-1) kum. Vorjahr] = 1, [Quartal], NULL) AS [Quartal (-1) kum. Vorjahr]

                 , iif([letzte 11 Monate] = 1, [Monat], NULL) AS [letzte 11 Monate]
                 , iif([letzte 13 Monate] = 1, [Monat], NULL) AS [letzte 13 Monate]
                 , iif([letzte 3 Tage] = 1, [Tag], NULL) AS [letzte 3 Tage]
                 , iif([letzte 7 Tage] = 1, [Tag], NULL) AS [letzte 7 Tage]
                 , iif([letzte 14 Tage] = 1, [Tag], NULL) AS [letzte 14 Tage]
                 , iif([letzte 30 Tage] = 1, [Tag], NULL) AS [letzte 30 Tage]

            FROM [kalender].[Kalender_Matrix])

  , [Zeit_Pivot]
        AS (SELECT [Datum], [Zeit_Spezialkategorie], [Zeit_Ebene1]
            FROM (SELECT [Datum]
                       , [Aktueller Tag]
                       , [Gestern]
                       , [M bisher]
                       , [M bisher Vorjahr]
                       , [M bisher / M bisher VJ]
                       , [Voriger M bisher]
                       , [M bisher gruppiert]
                       , [Q bisher]
                       , [Voriges Q bisher]
                       , [Q bisher gruppiert]
                       , [J bisher]
                       , [Voriges J bisher]
                       , [J bisher gruppiert]
                       , [Aktueller Monat]
                       , [Vormonat (-1)]
                       , [Vormonat (-2)]
                       , [Vormonat (-3)]
                       , [Akt. Monat Vorjahr]
                       , [Vormonat (-1) Vorjahr]
                       , [Vormonat (-2) Vorjahr]
                       , [Vormonat (-3) Vorjahr]
                       , [letzte 6 Monate]
                       , [letzte 12 Monate]
                       , [per Vormonat]
                       , [per Vormonat (-2)]
                       , [per Vormonat (-3)]
                       , [per Vormonat Vorjahr]
                       , [per Vormonat (-2) Vorjahr]
                       , [per Vormonat (-3) Vorjahr]
                       , [Aktuelles Jahr]
                       , [letztes Jahr]
                       , [3 Monate bis Vormonat (-2)]
                       , [Quartal (-1)]
                       , [Quartal (-2)]
                       , [Quartal (-3)]
                       , [Quartal (-1) Vorjahr]
                       , [Quartal (-2) Vorjahr]
                       , [Quartal (-3) Vorjahr]
                       , [Quartal (-1) kum.]
                       , [Quartal (-1) kum. Vorjahr]
                       , [letzte 11 Monate]
                       , [letzte 13 Monate]
                       , [letzte 3 Tage]
                       , [letzte 7 Tage]
                       , [letzte 14 Tage]
                       , [letzte 30 Tage]
                  FROM [Zeit_Dimension_mit_Text]) [p]
                     UNPIVOT
                     ([Zeit_Ebene1] FOR [Zeit_Spezialkategorie] IN
                    ([Aktueller Tag]
                    ,[Gestern]
                    ,[M bisher]
                    ,[M bisher Vorjahr]
                    ,[M bisher / M bisher VJ]
                    ,[Voriger M bisher]
                    ,[M bisher gruppiert]
                    ,[Q bisher]
                    ,[Voriges Q bisher]
                    ,[Q bisher gruppiert]
                    ,[J bisher]
                    ,[Voriges J bisher]
                    ,[J bisher gruppiert]
                    ,[Aktueller Monat]
                    ,[Vormonat (-1)]
                    ,[Vormonat (-2)]
                    ,[Vormonat (-3)]
                    ,[Akt. Monat Vorjahr]
                    ,[Vormonat (-1) Vorjahr]
                    ,[Vormonat (-2) Vorjahr]
                    ,[Vormonat (-3) Vorjahr]
                    ,[letzte 6 Monate]
                    ,[letzte 12 Monate]
                    ,[per Vormonat]
                    ,[per Vormonat (-2)]
                    ,[per Vormonat (-3)]
                    ,[per Vormonat Vorjahr]
                    ,[per Vormonat (-2) Vorjahr]
                    ,[per Vormonat (-3) Vorjahr]
                    ,[Aktuelles Jahr]
                    ,[letztes Jahr]
                    ,[3 Monate bis Vormonat (-2)]
                    ,[Quartal (-1)]
                    ,[Quartal (-2)]
                    ,[Quartal (-3)]
                    ,[Quartal (-1) Vorjahr]
                    ,[Quartal (-2) Vorjahr]
                    ,[Quartal (-3) Vorjahr]
                    ,[Quartal (-1) kum.]
                    ,[Quartal (-1) kum. Vorjahr]
                    ,[letzte 11 Monate]
                    ,[letzte 13 Monate]
                    , [letzte 3 Tage]
                    , [letzte 7 Tage]
                    , [letzte 14 Tage]
                    , [letzte 30 Tage])
                     ) AS [unpvt]
            WHERE [Zeit_Ebene1] IS NOT NULL)

  , [Zeit_Pivot_fuer_Datum]
        AS (SELECT [T1].[Datum]
                 , [T2].[Jahr]
                 , [T2].[Quartal]
                 , [T2].[Monat]
                 , [T2].[Tag]
                 , [T1].[Zeit_Spezialkategorie]
                 , [T1].[Zeit_Ebene1]
            FROM [Zeit_Pivot] [T1]
                     INNER JOIN [kalender].[Kalender_Tage] [T2] ON [T1].[Datum] = [T2].[Datum])


  , [Zeit_Spezial_Ebene2]
        AS (SELECT [Datum]
                 , [Jahr]
                 , [Quartal]
                 , [Monat]
                 , [Tag]
                 , [Zeit_Spezialkategorie]
                 , [Zeit_Ebene1]
                 , CASE
                       WHEN [Zeit_Ebene1] = [Jahr] THEN [Quartal]
                       WHEN [Zeit_Ebene1] = [Quartal] THEN [Monat]
                       WHEN [Zeit_Ebene1] = [Monat] THEN [Tag]
                       WHEN [Zeit_Spezialkategorie] IN ('J bisher gruppiert') THEN [Quartal]
                       WHEN [Zeit_Spezialkategorie] IN ('Q bisher gruppiert') THEN [Monat]
                       WHEN [Zeit_Spezialkategorie] IN ('M bisher / M bisher VJ', 'M bisher gruppiert') THEN [Tag]
            END AS [Zeit_Ebene2]
            FROM [Zeit_Pivot_fuer_Datum])

  , [Zeit_Spezial_Ebene3]
        AS (SELECT [Datum]
                 , [Jahr]
                 , [Quartal]
                 , [Monat]
                 , [Tag]
                 , [Zeit_Spezialkategorie]
                 , [Zeit_Ebene1]
                 , [Zeit_Ebene2]
                 , CASE
                       WHEN [Zeit_Ebene2] = [Quartal] THEN [Monat]
                       WHEN [Zeit_Ebene2] = [Monat] THEN [Tag]
            END AS [Zeit_Ebene3]
            FROM [Zeit_Spezial_Ebene2])

  , [Zeit_Spezial_Ebene4]
        AS (SELECT [Datum]
                 , [Jahr]
                 , [Quartal]
                 , [Monat]
                 , [Tag]
                 , [Zeit_Spezialkategorie]
                 , [Zeit_Ebene1]
                 , [Zeit_Ebene2]
                 , [Zeit_Ebene3]
                 , CASE
                       WHEN [Zeit_Ebene3] = [Monat] THEN [Tag]
            END AS [Zeit_Ebene4]
            FROM [Zeit_Spezial_Ebene3])


SELECT *
FROM [Zeit_Spezial_Ebene4]
GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS OFF 
GO

GO
