Die bezeichneten Zeilen (1,2) sind noch ungenügend, es darf nur ein Element erzeugt werden.
Laut deiner Darstellung der Geräteliste muss es unter (1) zwei Ergebniszeilen geben (Gehäuse und Netzteil).
Dementsprechend unter (2) vier Zeilen (Gehäuse-Boden, Gehäuse-Deckel, Netzteil-Gehäuse und ElektronikBoard zu Netzteil).
Sollte meine Analyse falsch sein, verstehe ich da wohl etwas nicht.
Bei ParamInteger1,2,3 wird der gleiche Wert übergeben.
Dann nimm auch nur einen Parameter. Es sei denn, du musst für zukünftige Aufgaben an der Stelle mit unterschiedlichen Paramtern rechnen.
Ich habe mal versucht, dein Aufgabe unter den gesetzten Bedingungen auf meine Weise zu lösen. Da ich kein
Access zur Verfügung habe, ist das natürlich ins blaue getippt und völlig ungeprüft!
Unter MS-
SQL, Oracle o.ä. würde ich das vermutlich eher mit einer User-Defined-Function lösen. Wobei das aber sehr von der exakten Aufgabe abhängt. Für eine Visualisierung in einer Anwendung, würde ich sicher andere Wege gehen.
Hier mein Ansatz:
Code:
SELECT *
FROM (
SELECT 1 AS HLevel,
AR.Bezeichnung,
'000000' AS Srt
FROM Hierarchie H1
LEFT JOIN Artikel AR
ON AR.ArtikelID = H1.Parent
WHERE H1.Parent = :ParamInteger1
UNION
SELECT 2 AS HLevel,
AR.Bezeichnung,
'00' & h2.Sort & '00' AS Srt
FROM Hierarchie H1
LEFT JOIN Hierarchie H2
ON H2.ArtLink = H1.Parent
LEFT JOIN Artikel AR
ON AR.ArtikelID = H2.ArtLink
WHERE H1.Parent = :ParamInteger2
UNION
SELECT 3 AS HLevel,
AR.Bezeichnung,
'00' & h2.Sort & h3.Sort AS Srt
FROM Hierarchie H1
LEFT JOIN Hierarchie H2
ON H2.ArtLink = H1.Parent
LEFT JOIN Hierarchie H3
ON H3.ArtLink = H2.ArtLink
LEFT JOIN Artikel AR
ON AR.ArtikelID = H3.ArtLink
WHERE H1.Parent = :ParamInteger3
)
order by Srt