![]() |
Datenbank: MSSQL • Version: 2005 • Zugriff über: BDE, MSSQL-ManagementStudio
[SQL] Daten nach Nachfolger sortieren
Hallo zusammen,
ich probiere verzweifelt eine SQL-Abfrage zu erstellen die mir meine Daten korrekt sortiert ausgibt. Die Sortierung soll in der Abfrage und nicht im Programm erfolgen. Rohdaten aus DB: ID | Pos | ID_danach -------------------- 5 | 20 | 6 6 | 20 | 7 7 | 10 | 8 8 | 10 | 2 9 | 5 | 10 10 | 5 | 0 2 | 10 | 9 Diese Daten würde ich gerne so sortieren dass als Ergebnis folgendes herauskommt: ID | Pos | ID_danach -------------------- 5 | 20 | 6 6 | 20 | 7 7 | 10 | 8 8 | 10 | 2 2 | 10 | 9 9 | 5 | 10 10 | 5 | 0 Das bedeutet: Die erste Zeile hat die ID, die bei ID_danach nicht vorkommt (5). Die Zeilen danach beziehen sich auf ID_danach der jewiligen Vorgängerzeile. Zeile 1 -> ID_danach = 6 Zeiel 2 -> ID = 6, ID_danach = 7 Zeiel 3 -> ID = 7, ID_danach = 8 . . . Ich hoffe die Frage ist verständlich und es findet sich jemand der sie beantworten kann. Gruß, Philipp |
Re: [SQL] Daten nach Nachfolger sortieren
Mit einer normalen Abfrage wird das schwer zu bewerkstelligen sein
|
Re: [SQL] Daten nach Nachfolger sortieren
SQL-Code:
Dein Vorgehen ist recht merkwürdig. Normalerweise weist man einem Datensatz seinen Parent zu und nicht seine Children.
EXECUTE('
DECLARE @done INT DECLARE @depth INT SELECT @depth = 1, @done = 0 SELECT *, @depth AS depth, CONVERT(VARCHAR, id) AS nodepath INTO #temp FROM tabelle t WHERE NOT EXISTS (SELECT * FROM tabelle WHERE id_danach = t.id) WHILE @done = 0 BEGIN SET @depth = @depth + 1 INSERT INTO #temp SELECT t.*, @depth, x.nodepath + ''|'' + CONVERT(VARCHAR, t.id) FROM #temp x INNER JOIN tabelle t ON x.id_danach = t.id WHERE x.depth = @depth - 1 IF @@ROWCOUNT = 0 SET @done = 1 END SELECT * FROM #temp ORDER BY nodepath DROP TABLE #temp ') Schau auch mal ![]() |
Re: [SQL] Daten nach Nachfolger sortieren
Danke omata,
das klappt so wie ich es mir vorgestellt habe. Die Zuordnung ist allerdings nicht als Child/Parent Verhältnis zu sehen, sonder als Reihenfolge in der Bauteile auf einem Band liegen. Jede Zeile entspricht einem Bauteil. ID_danach kennzeichnet das Bauteil dahinter. In jeder Spalte ID, sowie ID_danach sollte demnach jeder Wert nur einmal vorkommen. |
Re: [SQL] Daten nach Nachfolger sortieren
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:52 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz