tblEbene2 würde ich mit ParentBaugruppeID auf tblEbene1.BaugruppeID joinen. Dein Baum sieht quasi wie folgt aus:
tblEndprodukt
--> tblEbene1
----> tblEbene2
------> tblEbene3
In jeder Ebene kommt dann die Möglichkeit per tblBaugruppeZuordnung die tblRohstoffe zu joinen. Also etwa so:
tblEndprodukt
--> tblEbene1
----> tblBaugruppeZuordnung
------> tblRohstoffe
----> tblEbene2
------> tblBaugruppeZuordnung
--------> tblRohstoffe
------> tblEbene3
--------> tblBaugruppeZuordnung
----------> tblRohstoffe
Allerdings wirst du beim zusammen rechnen probleme bekommen wenn Rohstoffe an allen Ebenen hängen können.
Servus,
wie du gemeint hast die Ausgabe ist ziemlich unübersichtlich, da die Preise und Mengen doppelt vorkommen (siehe Screenshot: tblEinzelteil_1.Einzelteil_ID & 1_tblEinzelteil_Menge sowie bei tblEinzelteil_2.Einzelteil_ID & 2_tblEinzelteil_Menge. Jetzt wäre mein Plan gewesen, die Summe der Spalten Mengen und Preise zu bilden und durch die Anzahl der Vorkommen zu teillen. Also hier 2 also wie eine Art Distinct & Count. Hast du dafür eine Idee? Oder würdest du die Datenbank komplett anders modellieren bzw. aufbauen. Hier noch mein akteuller SQL-Befehl für mein überarbeitetes Datenmodell:
SELECT
tblBaugruppe_erste_Ebene_1.Menge AS 1_Baugruppe_Menge,
tblBaugruppe_zweite_Ebene_2.Menge AS 2_Baugruppe_Menge,
tblEinzelteil_1.Einzelteil_ID,
tblBaugruppe_Einzelteil_1.Menge AS 1_Einzelteil_Menge,
tblEinzelteil_1.Preis AS 1_Preis,
tblEinzelteil_2.Einzelteil_ID,
tblBaugruppe_Einzelteil_2.Menge AS 2_Einzelteil_Menge,
tblEinzelteil_2.Preis AS 2_Preis
FROM
(
(
(
(
(
(
(
tblEndprodukt
LEFT JOIN tblBaugruppe_erste_Ebene AS tblBaugruppe_erste_Ebene_1 ON tblBaugruppe_erste_Ebene_1.Endprodukt_ID = tblEndprodukt.Endprodukt_ID
)
LEFT JOIN tblBaugruppe AS tblBaugruppe_1 ON tblBaugruppe_1.Baugruppe_ID = tblBaugruppe_erste_Ebene_1.Baugruppe_ID
)
LEFT JOIN tblBaugruppe_Einzelteil AS tblBaugruppe_Einzelteil_1 ON tblBaugruppe_Einzelteil_1.Baugruppe_ID = tblBaugruppe_erste_Ebene_1.Baugruppe_ID
)
LEFT JOIN tblEinzelteil AS tblEinzelteil_1 ON tblEinzelteil_1.Einzelteil_ID = tblBaugruppe_Einzelteil_1.Einzelteil_ID
)
LEFT JOIN tblBaugruppe_zweite_Ebene AS tblBaugruppe_zweite_Ebene_2 ON tblBaugruppe_zweite_Ebene_2.Parent_Baugruppe_ID = tblBaugruppe_erste_Ebene_1.Baugruppe_ID
)
LEFT JOIN tblBaugruppe AS tblBaugruppe_2 ON tblBaugruppe_2.Baugruppe_ID = tblBaugruppe_zweite_Ebene_2.Baugruppe_ID
)
LEFT JOIN tblBaugruppe_Einzelteil AS tblBaugruppe_Einzelteil_2 ON tblBaugruppe_Einzelteil_2.Baugruppe_ID = tblBaugruppe_zweite_Ebene_2.Baugruppe_ID
)
LEFT JOIN tblEinzelteil AS tblEinzelteil_2 ON tblEinzelteil_2.Einzelteil_ID = tblBaugruppe_Einzelteil_2.Einzelteil_ID
WHERE
tblBaugruppe_Einzelteil_1.Baugruppe_ID = 1
GROUP BY
tblBaugruppe_erste_Ebene_1.Menge,
tblBaugruppe_zweite_Ebene_2.Menge,
tblBaugruppe_Einzelteil_1.Menge,
tblBaugruppe_Einzelteil_2.Menge,
tblEinzelteil_1.Einzelteil_ID,
tblEinzelteil_1.Preis,
tblEinzelteil_2.Einzelteil_ID,
tblEinzelteil_2.Preis;