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!
InformationsquelleAutor ryan jenkins | 2012-08-24
Schreibe einen Kommentar