SET QUOTED_IDENTIFIER ON GO SET ANSI_NULLS ON GO CREATE VIEW [transform].[Bilanzsalden_kumuliert] AS -- Bilanzsalden_kumuliert WITH "Config_Jahreswechsel" -- In welchem Monat startet das Geschäftsjahr? AS (SELECT * , iif([Monat] >= 7, 1, 0) AS [Offset1] , iif([Monat] >= 7, 0, -1) AS [Offset2] FROM (VALUES (1, 1) , (2, 1) , (3, 1) , (4, 1) , (5, 1) , (6, 1) , (7, 1)) AS [T1] ([Client_DB], [Monat])) , "Sachkonto_Salden_Bilanzkonten" -- Für alle weiteren Berechnungen sind nur Bilanzkonten interessant AS (SELECT [T1].[Client_DB] , [T1].[Branch Code] , [T1].[G_L Account No_] AS [Sachkontonr_] , month([T1].[Posting Date]) AS [Monat] , year([T1].[Posting Date]) AS [Jahr] , year([T1].[Posting Date]) * 100 + month([T1].[Posting Date]) AS [Periode] , [T1].[Posting Date] AS [Buchungsdatum] , convert(decimal(18, 2), [T1].[Amount]) AS [Betrag] FROM [xtract].[G_L_Entry_Salden] [T1] INNER JOIN [xtract].[G_L_Account] [T2] ON [T1].[Client_DB] = [T2].[Client_DB] AND [T1].[G_L Account No_] = [T2].[No_] WHERE [T2].[Income_Balance] = '1') , [Buchungsperiode_alle] -- alle Buchungsperioden AS (SELECT DISTINCT [Periode] , [Jahr] , [Monat] FROM [Sachkonto_Salden_Bilanzkonten]) , [Sachkonto_alle] -- Liste aller bebuchten Bilanzkonten AS (SELECT DISTINCT [Client_DB] , [Branch Code] , [Sachkontonr_] FROM [Sachkonto_Salden_Bilanzkonten]) , [Sachkonto_Salden_Null] -- Kreuzprodukt über alle Bilanzkonten und alle Perioden AS (SELECT [T1].[Client_DB] , [T1].[Branch Code] , [T1].[Sachkontonr_] , [T2].[Monat] , [T2].[Jahr] , [T2].[Periode] , 0.0 AS [Betrag] FROM [Sachkonto_alle] [T1] CROSS JOIN [Buchungsperiode_alle] [T2]) , [Sachkonto_Salden_aufgefuellt] -- Kombination aus dem Kreuzprodukt von oben mit den tatsächlichen Buchungswerten, um eine vollständige Liste aller Konten und Buchungsperioden zu erhalten AS (SELECT [T1].[Client_DB] , [T1].[Branch Code] , [T1].[Sachkontonr_] , [T1].[Monat] , [T1].[Jahr] , [T1].[Periode] , isnull([T2].[Betrag], [T1].[Betrag]) AS [Betrag] FROM [Sachkonto_Salden_Null] [T1] LEFT JOIN [Sachkonto_Salden_Bilanzkonten] [T2] ON [T1].[Client_DB] = [T2].[Client_DB] AND T1.[Branch Code] = T2.[Branch Code] AND [T1].[Sachkontonr_] = [T2].[Sachkontonr_] AND [T1].[Periode] = [T2].[Periode]) , [Sachkonto_Salden_Details] -- Berechnung Geschäftsjahr (Mandant 1, 6, 7 ab Januar, Mandant 9 ab September) -- Berechnung Eröffnungsbuchung, falls Feld Origin = 0 AS (SELECT [T1].* , iif([T1].[Monat] >= [T2].[Monat], [T1].[Jahr] + [T2].[Offset1], [T1].[Jahr] + [T2].[Offset2]) AS [Geschaeftsjahr] , 0.0 AS [EB] , [Betrag] AS [Saldo_ohne_EB] FROM [Sachkonto_Salden_aufgefuellt] [T1] INNER JOIN [Config_Jahreswechsel] [T2] ON [T1].[Client_DB] = [T2].[Client_DB]) , "EB_berechnet" -- Summe über das Vorjahr (Geschäftsjahr) AS (SELECT [Client_DB] , [Branch Code] , [Geschaeftsjahr] , min([Periode]) + 100 AS [Periode] , [Sachkontonr_] , sum([Betrag]) AS [EB_berechnet] FROM [Sachkonto_Salden_Details] GROUP BY [Client_DB] , [Branch Code] , [Geschaeftsjahr] , [Sachkontonr_]) , [EB_berechnet_seit_Anbeginn] -- Summe über das Vorjahr (Geschäftsjahr) ab dem 1. Monat des Geschäftsjahrs AS (SELECT [Client_DB] , [Branch Code] , [Geschaeftsjahr] , [Periode] , [Sachkontonr_] , [EB_berechnet] AS [EB_berechnet_ein_Jahr] , sum([EB_berechnet]) OVER ( PARTITION BY [Client_DB], [Branch Code], [Sachkontonr_] ORDER BY [Geschaeftsjahr] ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) AS [EB_berechnet] FROM [EB_berechnet]) , [Sachkonto_Salden_Summe] -- Gruppierung/Summierung nach Periode, um Konto und Periode eindeutig zu haben. AS (SELECT [Client_DB] , [Branch Code] , [Sachkontonr_] , [Geschaeftsjahr] , [Periode] , sum([EB]) AS [EB] , sum([Saldo_ohne_EB]) AS [Saldo_ohne_EB] , sum([Betrag]) AS [Saldo] FROM [Sachkonto_Salden_Details] GROUP BY [Client_DB] , [Branch Code] , [Sachkontonr_] , [Geschaeftsjahr] , [Periode]) , [Sachkonto_Salden_EB_berechnet] -- Join mit dem berechneten EB über Buchungsperiode und Kontonummer AS (SELECT [T1].* , isnull([T2].[EB_berechnet], 0.0) AS [EB_berechnet] , [T1].[Saldo_ohne_EB] + isnull([T2].[EB_berechnet], 0.0) AS [Saldo_berechnet] FROM [Sachkonto_Salden_Summe] [T1] LEFT JOIN [EB_berechnet_seit_Anbeginn] [T2] ON [T1].[Client_DB] = [T2].[Client_DB] AND T1.[Branch Code] = T2.[Branch Code] AND [T1].[Periode] = [T2].[Periode] AND [T1].[Sachkontonr_] = [T2].[Sachkontonr_]) , [Sachkonto_Salden_EB_Prio] -- Falls der EB fehlt, wird der berechnete Saldo verwendet AS (SELECT [T1].* , [T1].[Saldo_berechnet] AS [Saldo_kombiniert] FROM [Sachkonto_Salden_EB_berechnet] [T1]) , [Sachkonto_Salden_kumuliert] -- Kumulierter Saldo ab dem 1. Monat des Geschäftsjahrs AS (SELECT * , eomonth(datefromparts([Periode] / 100, [Periode] % 100, 1)) AS [Buchungsdatum] , sum([Saldo]) OVER (PARTITION BY [Client_DB], [Branch Code], [Sachkontonr_], [Geschaeftsjahr] ORDER BY [Periode]) AS [Saldo_kumuliert_gebucht] , sum([Saldo_kombiniert]) OVER (PARTITION BY [Client_DB], [Branch Code], [Sachkontonr_], [Geschaeftsjahr] ORDER BY [Periode]) AS [Saldo_kumuliert] FROM [Sachkonto_Salden_EB_Prio]) , [Sachkonto_Aktiva_Passiva] -- Bei Konten, die mit 0 oder 1 beginnen, wird abhängig vom Saldo ein "_A" oder "_P" angehängt AS (SELECT * , CASE WHEN left([Sachkontonr_], 1) NOT IN ('0', '1') THEN [Sachkontonr_] WHEN [Saldo_kumuliert] >= 0 THEN [Sachkontonr_] + '_A' ELSE [Sachkontonr_] + '_P' END AS [Konto_Bilanz] FROM [Sachkonto_Salden_kumuliert]) , [Sachkonto_Aktiva_Passiva_SKR51] -- Acct_Nr mit Kostenrechnungsmerkmalen für Join mit SKR51_Uebersetzung.csv AS (SELECT * , '00-00-' + [Konto_Bilanz] + '-00-00-00' AS [Acct_Nr] FROM [Sachkonto_Aktiva_Passiva]) SELECT [Client_DB] , [Branch Code] , [Sachkontonr_] , [Geschaeftsjahr] , [Periode] , [Buchungsdatum] --, [EB] , [EB_berechnet] , [Saldo_ohne_EB] --, [Saldo_kumuliert_gebucht] --, [Saldo_kombiniert] --, [Saldo] --, [Saldo_berechnet] , [Saldo_kumuliert] , [Konto_Bilanz] FROM [Sachkonto_Aktiva_Passiva] GO SET QUOTED_IDENTIFIER OFF GO SET ANSI_NULLS OFF GO GO