Lagerorthierarchie eines bestimmten Lagerortes abfragen

Gängige SQL-Befehle für spezielle Abfragen
Antworten
Benutzeravatar
ABraun
Vectotax Mitarbeiter
Beiträge: 52
Registriert: 17.07.2008, 10:46:44

Lagerorthierarchie eines bestimmten Lagerortes abfragen

Beitrag von ABraun »

Kompatibel ab SQL Server 2005 (Express) aufwärts.
Mit dem folgenden SQL-Befehl kann die Hierarchie (vom obersten bis zum gewählen Lagerort) eines Lagerortes abgefragt werden (hier beispielhaft vom Lagerort mit der ID 83):

In Einzeldatensätzen (pro Lagerort eine Zeile):

Code: Alles auswählen

DECLARE @no bit; WITH Lagerorte(ID, Parent, Bezeichnung, Level) AS (
SELECT LO1.ID, LO1.Parent, LO1.Bezeichnung, 0 AS Level FROM Lagerort AS LO1 WHERE LO1.ID = 83
UNION ALL 
SELECT LO2.ID, LO2.Parent, LO2.Bezeichnung, (Level + 1) AS Level FROM Lagerort AS LO2 INNER JOIN Lagerorte AS LL ON LO2.ID = LL.Parent
) SELECT Bezeichnung FROM Lagerorte ORDER BY Level DESC OPTION (MAXRECURSION 100);
Als zusammengesetzter Text aus den Lagerorten (nur eine Zeile):

Code: Alles auswählen

DECLARE @no bit; WITH Lagerorttext(ID, Parent, Bezeichnung, Level, SB) AS (
SELECT LO1.ID, LO1.Parent, LO1.Bezeichnung, 0 AS Level, CAST(LO1.Bezeichnung AS VARCHAR(255)) AS SB FROM Lagerort AS LO1 WHERE LO1.ID = 83
UNION ALL 
SELECT LO2.ID, LO2.Parent, LO2.Bezeichnung, (Level + 1) AS Level, CAST(LO2.Bezeichnung + ' / ' + SB AS VARCHAR(255)) AS SB FROM Lagerort AS LO2 INNER JOIN Lagerorttext AS LL ON LO2.ID = LL.Parent
) SELECT TOP 1 SB FROM Lagerorttext ORDER BY Level DESC OPTION (MAXRECURSION 100);
Alle IDs mit den zugehörigen Lagerorten:

Code: Alles auswählen

DECLARE @no bit; WITH Lagerorttext(ID, Parent, Bezeichnung, Level, SB) AS (
SELECT LO1.ID, LO1.Parent, LO1.Bezeichnung, 0 AS Level, CAST(LO1.Bezeichnung AS VARCHAR(255)) AS SB FROM Lagerort AS LO1 WHERE Parent = 0
UNION ALL
SELECT LO2.ID, LO2.Parent, LO2.Bezeichnung, (Level + 1) AS Level, CAST(SB + ' / ' + LO2.Bezeichnung AS VARCHAR(255)) AS SB FROM Lagerort AS LO2 INNER JOIN Lagerorttext AS LL ON LO2.Parent = LL.ID
) SELECT ID, SB FROM Lagerorttext ORDER BY ID ASC OPTION (MAXRECURSION 100);
Mit freundlichen Grüßen

Alexander Braun
Vectotax Software GmbH
Antworten