AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi [SQL] Daten nach Nachfolger sortieren
Thema durchsuchen
Ansicht
Themen-Optionen

[SQL] Daten nach Nachfolger sortieren

Ein Thema von phil_ro · begonnen am 8. Dez 2008 · letzter Beitrag vom 9. Dez 2008
Antwort Antwort
phil_ro

Registriert seit: 25. Nov 2008
3 Beiträge
 
Delphi 2006 Enterprise
 
#1

[SQL] Daten nach Nachfolger sortieren

  Alt 8. Dez 2008, 16:39
Datenbank: MSSQL • Version: 2005 • Zugriff über: BDE, MSSQL-ManagementStudio
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
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: [SQL] Daten nach Nachfolger sortieren

  Alt 8. Dez 2008, 16:45
Mit einer normalen Abfrage wird das schwer zu bewerkstelligen sein
Markus Kinzler
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: [SQL] Daten nach Nachfolger sortieren

  Alt 9. Dez 2008, 00:04
SQL-Code:
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
')
Dein Vorgehen ist recht merkwürdig. Normalerweise weist man einem Datensatz seinen Parent zu und nicht seine Children.
Schau auch mal hier
  Mit Zitat antworten Zitat
phil_ro

Registriert seit: 25. Nov 2008
3 Beiträge
 
Delphi 2006 Enterprise
 
#4

Re: [SQL] Daten nach Nachfolger sortieren

  Alt 9. Dez 2008, 11:02
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.
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: [SQL] Daten nach Nachfolger sortieren

  Alt 9. Dez 2008, 17:55
Zitat von phil_ro:
...das klappt so wie ich es mir vorgestellt habe.
schön das es dir weitergeholfen hat.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:41 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz