TSQL - While-Schleife in der select?
In SQL server
Ok, also ich arbeite mit einer Datenbank-Tabelle, in der Zeilen können übergeordnete Zeilen, die dann mit parent Reihen Ihrer eigenen. Brauche ich, um wählen Sie die root 'Zeile'. Ich weiß nicht, der beste Weg, dies zu tun.
Gibt es ein Feld "ParentId", die links der Zeile, um die Zeile mit der entsprechenden ID. Wenn die ParentId = 0 ist, ist die root-Zeile.
Dies ist meine Abfrage jetzt:
SELECT Releases.Name,WorkLog.WorkLogId
FROM WorkLog,Releases
WHERE
Releases.ReleaseId = WorkLog.ReleaseId
and WorkLogDateTime >= @StartDate
and WorkLogDateTime <= @end
Ich weiß nicht wirklich brauchen, der Release-Name des Kindes-releases, ich will nur die root-Release-Namen, so dass ich möchten, wählen Sie das Ergebnis einer While-Schleife wie diese:
WHILE (ParentReleaseId != 0)
BEGIN
@ReleaseId = ParentReleaseId
END
Select Release.Name
where Release.RealeaseId = @ReleaseId
Ich weiß, die syntax ist schrecklich, aber ich hoffe, ich gebe Ihnen eine Idee von, was ich versuche zu erreichen.
- Also ich vermute, es gibt mehr als eine Version mit
ParentReleaseId
gleich null? - Werden Sie sagen, dass die Releases-Tabelle ist hierarchicial, z.B. Release-X hat einen Vorgänger, und dann, dass die Version hat seinen eigenen Vorgänger, und so weiter? Also das problem ist das finden der ursprünglichen Veröffentlichung für alle späteren release, die innerhalb der angegebenen Termine?
- Hoffentlich, du bist auf 2005 oder später - können Sie das bestätigen?
- Ja, es ist mehr als eine übergeordnete Freigabe = 0. David ja das Recht haben Sie. Ich bin auf 2008, Damien
- Sieht aus wie Sie hatte einen guten push in die richtige Richtung mit dem rekursiven CTE-Antwort unten. Viel Glück!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist ein Beispiel, das nützlich sein könnte:
Diese Abfrage wird immer eine untere element des Baumes, und suchen bis zu den Eltern der Eltern.
Wie ich 4-Ebene in meiner Tabelle -> Kategorie 7->5, 5->3, 3-> 1. Wenn ich ihm die 5-es finden die 1, denn dies ist die höchste Ebene der drei.
(Änderung der last auswählen, können Sie alle von den Eltern auf den Weg.)
sowas
und mit Geige : http://sqlfiddle.com/#!3/a5fa1/1/0
Mit Andras Ansatz, bearbeitete ich das Letzte wählen, um direkt geben Sie mir die ID der root-release
Mein problem ist jetzt ich will laufen durch alle @IDs (905 im code) und join wird jeder Datensatz zu einem Ergebnis