rolandg1881
Aktiver Benutzer
- Beiträge
- 40
Hallo!
In unserem System gibt es eine Verdichtungskontenstruktur d.h. unter einem Verdichtungskonto stehen Konten(Kostenstellen) und es können wieder Verdichtungskonten darunter stehen usw.
Ich habe es jetzt geschafft diese Struktur mit einer SQL Abfrage auszulesen habe aber noch ein (hoffentlich) kleines Problem.
Wie man in der Auswertung sehen kann rufe ich die Verdichtungskontonummer 41000V ab. Das ist das "Überkonto" und unter Kontonummer sehe ich alle daraunter liegenden Konten ABER leider wird ganz oben auch noch das 41000V mit reingenommen. Kann mir jemand helfen meine Abfrage so anzupassen, dass ich nur die darunterliegenden Konten in der Spalte Konto sehe?
Zur Info ALLE Konten egal ob Verdichtung oder "Unterkonto" stehen in einer Tabelle Account$CostCenter wo JEDES Konto eine PK_id (HauptId) und dann die FK_verd (VerdichtungskontoId9 hat mit dem die Verbindung zum Verdichtungskonto beschrieben wird.
Meine Abfrage schaut so aus:
with k1 AS (
select
CAST(ACC.PK_id AS CHAR(30))KontoId,
ACC.nummer AS ACC_Nummer,
ACC.nummerb AS ACC_Nummer1,
ACC.name AS Kontoname,
ACC.FK_overd AS ACC_overd
from Account$CostCenter ACC
), k2 AS (
select
1 AS Ebene,
k1.KontoId AS HauptkontoId,
k1.ACC_Nummer AS Verdichtungskontonummer,
k1.ACC_Nummer1 AS Kontonummer,
k1.Kontoname AS Kontoname,
CAST(k1.KontoId AS CHAR(30))KontoId,
CAST(k1.ACC_overd AS CHAR(30))ACC_overd,
cast(k1.KontoId AS VARCHAR(MAX)) AS pfad
from k1
UNION ALL
select k2.ebene + 1,
k2.HauptkontoId,
(CASE WHEN k2.Ebene + 1 = 1 THEN CAST(k1.ACC_Nummer AS CHAR(30)) ELSE k2.Verdichtungskontonummer END),
k1.ACC_Nummer1 AS Kontonummer,
k1.Kontoname,
CAST(k1.KontoId AS CHAR(30))ACC_PK_id,
CAST(k1.ACC_overd AS CHAR(30))ACC_overd,
cast(k2.pfad + '\' + cast(k1.KontoId AS VARCHAR(MAX)) AS VARCHAR(MAX)) AS pfad
from k2
INNER JOIN k1
ON k2.KontoId = k1.ACC_overd
)
Select *
from k2
where k2.Verdichtungskontonummer = '41000V'
Ausgabe: Hier wäre super wenn die erste Zeile nicht drin wäre.
Danke und lg
In unserem System gibt es eine Verdichtungskontenstruktur d.h. unter einem Verdichtungskonto stehen Konten(Kostenstellen) und es können wieder Verdichtungskonten darunter stehen usw.
Ich habe es jetzt geschafft diese Struktur mit einer SQL Abfrage auszulesen habe aber noch ein (hoffentlich) kleines Problem.
Wie man in der Auswertung sehen kann rufe ich die Verdichtungskontonummer 41000V ab. Das ist das "Überkonto" und unter Kontonummer sehe ich alle daraunter liegenden Konten ABER leider wird ganz oben auch noch das 41000V mit reingenommen. Kann mir jemand helfen meine Abfrage so anzupassen, dass ich nur die darunterliegenden Konten in der Spalte Konto sehe?
Zur Info ALLE Konten egal ob Verdichtung oder "Unterkonto" stehen in einer Tabelle Account$CostCenter wo JEDES Konto eine PK_id (HauptId) und dann die FK_verd (VerdichtungskontoId9 hat mit dem die Verbindung zum Verdichtungskonto beschrieben wird.
Meine Abfrage schaut so aus:
with k1 AS (
select
CAST(ACC.PK_id AS CHAR(30))KontoId,
ACC.nummer AS ACC_Nummer,
ACC.nummerb AS ACC_Nummer1,
ACC.name AS Kontoname,
ACC.FK_overd AS ACC_overd
from Account$CostCenter ACC
), k2 AS (
select
1 AS Ebene,
k1.KontoId AS HauptkontoId,
k1.ACC_Nummer AS Verdichtungskontonummer,
k1.ACC_Nummer1 AS Kontonummer,
k1.Kontoname AS Kontoname,
CAST(k1.KontoId AS CHAR(30))KontoId,
CAST(k1.ACC_overd AS CHAR(30))ACC_overd,
cast(k1.KontoId AS VARCHAR(MAX)) AS pfad
from k1
UNION ALL
select k2.ebene + 1,
k2.HauptkontoId,
(CASE WHEN k2.Ebene + 1 = 1 THEN CAST(k1.ACC_Nummer AS CHAR(30)) ELSE k2.Verdichtungskontonummer END),
k1.ACC_Nummer1 AS Kontonummer,
k1.Kontoname,
CAST(k1.KontoId AS CHAR(30))ACC_PK_id,
CAST(k1.ACC_overd AS CHAR(30))ACC_overd,
cast(k2.pfad + '\' + cast(k1.KontoId AS VARCHAR(MAX)) AS VARCHAR(MAX)) AS pfad
from k2
INNER JOIN k1
ON k2.KontoId = k1.ACC_overd
)
Select *
from k2
where k2.Verdichtungskontonummer = '41000V'
Ausgabe: Hier wäre super wenn die erste Zeile nicht drin wäre.
Danke und lg