Die Originaltabelle kann ich hier leider nicht posten. Zu viele Daten, die dem Datenschutz unterliegen.
Ursprünglich habe ich eine Tabelle (gekürzt)
CREATE TABLE t_import_kontostruktur (
HHJ TEXT,
HKZ TEXT,
Kapitel TEXT,
Titel TEXT,
E1 TEXT,
E2 TEXT,
Bezeichnung TEXT
)
Was in Titel steht hat nicht immer eine Ebene 1;
Was in Ebene 1 steht hat immer einen Titel, jedoch nicht immer eine Ebene 2;
Was in Ebene 2 steht hat immer einen Titel und eine Ebene 1;
Das HHJ betrifft die Jahre 2018 bis 2013.
Über die Jahre hinweg hat sich Die Bezeichnung ggf. geändert. Ich benötige stets auf die neues Version der Bezeichnung, unabhängig vom Jahr.
Die Tabelle habe ich nach Titel, Ebene 1 und Ebene 2 aufgelöst
So habe ich die reinen Titelzeilen extrahiert
REATE VIEW v_kto_BSt AS
SELECT MAX(HHJ) AS HHJ,
Titel,
Kapitel || '/' || Titel AS BSt,
Bezeichnung AS Zweckbestimmung,
'' AS E1,
'' AS BStE1,
'' AS Ebene1,
'' AS E2,
'' AS BStE1E2,
'' AS Ebene2,
CASE WHEN E2 IS NULL THEN CASE WHEN E1 IS NULL THEN Kapitel || '/' || Titel ELSE Kapitel || '/' || Titel || ' E1: ' || E1 END ELSE Kapitel || '/' || Titel || ' E1: ' || E1 || ' E2: ' || E2 END AS Buchung,
CASE WHEN E2 IS NULL THEN CASE WHEN E1 IS NULL THEN HHJ || '-' || Kapitel || '/' || Titel ELSE HHJ || '-' || Kapitel || '/' || Titel || ' E1: ' || E1 END ELSE HHJ || '-' || Kapitel || '/' || Titel || ' E1: ' || E1 || ' E2: ' || E2 END AS IDBSt
FROM t_import_kontostruktur
WHERE Kapitel IS NOT NULL AND
E1 IS NULL AND
E2 IS NULL
GROUP BY Buchung
So habe ich die reinen Ebene 1-Zeilen extrahiert
CREATE VIEW v_kto_Ebene1 AS
SELECT MAX(t_import_kontostruktur.HHJ) AS HHJ,
t_import_kontostruktur.Kapitel AS Kapitel,
t_import_kontostruktur.Titel AS Titel,
t_import_kontostruktur.Kapitel || '/' || t_import_kontostruktur.Titel AS BSt1,
v_kto_BSt.Zweckbestimmung,
t_import_kontostruktur.E1 AS E1,
t_import_kontostruktur.Kapitel || '/' || t_import_kontostruktur.Titel || ' E1: ' || t_import_kontostruktur.E1 AS BStE1,
t_import_kontostruktur.Bezeichnung AS Ebene1,
'' AS E2,
'' AS BStE1E2,
'' AS Ebene2,
CASE WHEN t_import_kontostruktur.E2 IS NULL THEN CASE WHEN t_import_kontostruktur.E1 IS NULL THEN t_import_kontostruktur.Kapitel || '/' || t_import_kontostruktur.Titel ELSE t_import_kontostruktur.Kapitel || '/' || t_import_kontostruktur.Titel || ' E1: ' || t_import_kontostruktur.E1 END ELSE t_import_kontostruktur.Kapitel || '/' || t_import_kontostruktur.Titel || ' E1: ' || t_import_kontostruktur.E1 || ' E2: ' || t_import_kontostruktur.E2 END AS Buchung,
CASE WHEN t_import_kontostruktur.E2 IS NULL THEN CASE WHEN t_import_kontostruktur.E1 IS NULL THEN t_import_kontostruktur.HHJ || '-' || t_import_kontostruktur.Kapitel || '/' || t_import_kontostruktur.Titel ELSE t_import_kontostruktur.HHJ || '-' || t_import_kontostruktur.Kapitel || '/' || t_import_kontostruktur.Titel || ' E1: ' || t_import_kontostruktur.E1 END ELSE t_import_kontostruktur.HHJ || '-' || t_import_kontostruktur.Kapitel || '/' || t_import_kontostruktur.Titel || ' E1: ' || t_import_kontostruktur.E1 || ' E2: ' || t_import_kontostruktur.E2 END AS IDBSt
FROM t_import_kontostruktur
INNER JOIN
v_kto_BSt ON BSt1 = v_kto_BSt.BSt
WHERE t_import_kontostruktur.Kapitel IS NOT NULL AND
t_import_kontostruktur.E1 IS NOT NULL AND
t_import_kontostruktur.E2 IS NULL
GROUP BY Buchung
Hier wollte ich die Ebene 2-Zeilen extrahieren - das Problem
CREATE VIEW v_kto_Ebene2 AS
SELECT t_import_kontostruktur.HHJ AS HHJ,
t_import_kontostruktur.Kapitel AS Kapitel,
t_import_kontostruktur.Titel AS Titel,
t_import_kontostruktur.Kapitel || '/' || t_import_kontostruktur.Titel AS BSt0,
v_kto_Ebene1.Zweckbestimmung,
t_import_kontostruktur.E1 AS E1,
t_import_kontostruktur.Kapitel || '/' || t_import_kontostruktur.Titel || ' E1: ' || t_import_kontostruktur.E1 AS BSt2,
v_kto_Ebene1.Ebene1 AS Ebene1,
t_import_kontostruktur.E2 AS E2,
t_import_kontostruktur.Kapitel || '/' || t_import_kontostruktur.Titel || ' E1: ' || t_import_kontostruktur.E1 || ' E2: ' || t_import_kontostruktur.E2 AS BStE1E2,
t_import_kontostruktur.Bezeichnung AS Ebene2,
CASE WHEN t_import_kontostruktur.E2 IS NULL THEN CASE WHEN t_import_kontostruktur.E1 IS NULL THEN t_import_kontostruktur.Kapitel || '/' || t_import_kontostruktur.Titel ELSE t_import_kontostruktur.Kapitel || '/' || t_import_kontostruktur.Titel || ' E1: ' || t_import_kontostruktur.E1 END ELSE t_import_kontostruktur.Kapitel || '/' || t_import_kontostruktur.Titel || ' E1: ' || t_import_kontostruktur.E1 || ' E2: ' || t_import_kontostruktur.E2 END AS Buchung,
CASE WHEN t_import_kontostruktur.E2 IS NULL THEN CASE WHEN t_import_kontostruktur.E1 IS NULL THEN t_import_kontostruktur.HHJ || '-' || t_import_kontostruktur.Kapitel || '/' || t_import_kontostruktur.Titel ELSE t_import_kontostruktur.HHJ || '-' || t_import_kontostruktur.Kapitel || '/' || t_import_kontostruktur.Titel || ' E1: ' || t_import_kontostruktur.E1 END ELSE t_import_kontostruktur.HHJ || '-' || t_import_kontostruktur.Kapitel || '/' || t_import_kontostruktur.Titel || ' E1: ' || t_import_kontostruktur.E1 || ' E2: ' || t_import_kontostruktur.E2 END AS IDBSt
FROM t_import_kontostruktur
INNER JOIN
v_kto_Ebene1 ON BSt2 = v_kto_Ebene1.BStE1
WHERE t_import_kontostruktur.Kapitel IS NOT NULL AND
t_import_kontostruktur.E1 IS NOT NULL AND
t_import_kontostruktur.E2 IS NOT NULL
Zum Schluss will ich alle extrahierten Zeilen zusammenfassen, damit ich die einer anderen Tabelle mit mehr als 340.000 Zeilen zuordnen kann.
CREATE VIEW v_kto_kontostrukur AS
SELECT *
FROM v_kto_BSt
UNION
SELECT *
FROM v_kto_Ebene1
UNION
SELECT *
FROM v_kto_Ebene2
jede Buchung darf nur 1 x vorkommen und zwar in der nach HHJ neuesten Version.
Vielleicht etwas umständlich, aber ich weiss mir leider anderweitig nicht weiter.
Einen schönen Tag noch
Paul-Werner