SQL-Abfrage: Hierarchische Koaleszenz

8

Ich habe eine Tabelle, die eine Hierarchie definiert:

%Vor%

Hierarchiediagramm für diese Daten:

Ich möchte eine Abfrage schreiben, die für einen gegebenen [id] -Wert eine einzelne Zeile zurückgibt. Die Zeile sollte die [id] und [parentID] Informationen dieser Zeile enthalten. Es sollte auch die Felder [largeData1 ... n] enthalten. Wenn ein largeData-Feld jedoch null ist, sollte es die Hierarchie durchlaufen, bis ein Nicht-Null-Wert für dieses Feld gefunden wird. Kurz gesagt sollte es wie die Coalesce-Funktion funktionieren, außer über eine Hierarchie von Zeilen statt einer Reihe von Spalten.

Beispiel:

Wo [id] = 1:

%Vor%

Wo [id] = 2

%Vor%

Wo [id] = 3

%Vor%

Wo [id] = 4

%Vor%

Wo [id] = 5

%Vor%

Bisher habe ich das:

%Vor%

Dies gibt die Ergebnisse zurück, nach denen ich suche. Gemäß dem Abfrageplan wird jedoch für jedes largeData-Feld, das ich zurückziehe, ein separater Durchlauf durch die Hierarchie durchgeführt.

Wie kann ich das effizienter machen?

Dies ist offensichtlich eine vereinfachte Version eines komplexeren Problems. Die letzte Abfrage gibt Daten im XML-Format zurück, sodass alle Lösungen, die die FOR XML-Klausel beinhalten, vollkommen in Ordnung sind.

Ich kann dafür eine CLR-Aggregatfunktion erstellen, wenn dies helfen würde. Ich habe diese Route noch nicht erkundet.

    
Chris Nielsen 21.08.2010, 16:50
quelle

1 Antwort

6

Ich kam auf folgendes:

%Vor%

Beginnen Sie im Grunde bei Ihrem Zielknoten und gehen Sie den Baum hinauf, wobei Sie Ihre Nullspalten durch Nicht-Null-Werte ersetzen, falls und wenn sie gefunden werden.

(Sorry, aber ich mache am Wochenende kein XML.)

    
Philip Kelley 21.08.2010, 18:56
quelle