Hallo,
Ich habe ein kleines Problem mit rekursiven Abfragen.
Ausgangssituation:
Ich habe Artikel, die vom Typ her eine Stückliste sind, also weitere Artikel als Elemente enthalten.
Stücklisten haben allerdings keinen LEK ( letzten EK ), den wir aber zwecks Analysen benötigen. Nun hatte ich die Idee, die LEKs der Elemente in einer Stückliste summieren:
[highlight=sql]
select
sum(varianten.LetzterEK * stckliste.Menge) LEK
from
ArtikelStueckliste stckliste
join
ArtikelVarianten varianten
on varianten.Artikelnummer = stckliste.Element
and varianten.auspraegungID = stckliste.AuspraegungID
and varianten.Mandant = stckliste.Mandant
where
stckliste.Stueckliste = '0815'
[/highlight]
Damit bekomme ich schon mal den errechneten LEK der Stückliste 0815.
Das Problem:
Nun gibt es allerdings Stücklisten, die als Element weitere Stücklisten haben, weswegen ich zur Rekursion komme.
Da ich mich zum ersten mal damit befasse, hakt es natürlich an einigen Ecken.
Ich habe bspw. mal folgendes probiert ( erstmal ohne Bezug auf den Preis! ):
[highlight=sql]
;with cte as (
select a.Stueckliste, a.Element, a.Menge from artikelstueckliste a
union all
select b.Stueckliste, b.Element, b.Menge from cte join ArtikelStueckliste b on cte.element = b.stueckliste
)
select * from cte where stueckliste = '0816'
[/highlight]
Hier bekomme ich allerdings nur die zwei Elemente der Stückliste 0816. Diese beiden ( nennen wir sie mal 0817 und 0818 ) sind selbst aber auch Stücklisten.
Mein Ziel ist es nun, auch die Elemente von 0817 und 0818 zu erhalten.
Muss ich da komplett umdenken oder kann man das vorhandene ausbauen?
Danke
Arne
Ich habe ein kleines Problem mit rekursiven Abfragen.
Ausgangssituation:
Ich habe Artikel, die vom Typ her eine Stückliste sind, also weitere Artikel als Elemente enthalten.
Stücklisten haben allerdings keinen LEK ( letzten EK ), den wir aber zwecks Analysen benötigen. Nun hatte ich die Idee, die LEKs der Elemente in einer Stückliste summieren:
[highlight=sql]
select
sum(varianten.LetzterEK * stckliste.Menge) LEK
from
ArtikelStueckliste stckliste
join
ArtikelVarianten varianten
on varianten.Artikelnummer = stckliste.Element
and varianten.auspraegungID = stckliste.AuspraegungID
and varianten.Mandant = stckliste.Mandant
where
stckliste.Stueckliste = '0815'
[/highlight]
Damit bekomme ich schon mal den errechneten LEK der Stückliste 0815.
Das Problem:
Nun gibt es allerdings Stücklisten, die als Element weitere Stücklisten haben, weswegen ich zur Rekursion komme.
Da ich mich zum ersten mal damit befasse, hakt es natürlich an einigen Ecken.
Ich habe bspw. mal folgendes probiert ( erstmal ohne Bezug auf den Preis! ):
[highlight=sql]
;with cte as (
select a.Stueckliste, a.Element, a.Menge from artikelstueckliste a
union all
select b.Stueckliste, b.Element, b.Menge from cte join ArtikelStueckliste b on cte.element = b.stueckliste
)
select * from cte where stueckliste = '0816'
[/highlight]
Hier bekomme ich allerdings nur die zwei Elemente der Stückliste 0816. Diese beiden ( nennen wir sie mal 0817 und 0818 ) sind selbst aber auch Stücklisten.
Mein Ziel ist es nun, auch die Elemente von 0817 und 0818 zu erhalten.
Muss ich da komplett umdenken oder kann man das vorhandene ausbauen?
Danke
Arne
Comment