Ich versuche, ein CTE inline zu verwenden, wie eine Funktion, aber ich kann keine Funktion erstellen, da ich nur Lesezugriff auf die Datenbank habe. Gibt es einen anderen Weg, dies einfach zu tun?Verwenden Sie eine Ausgabe CTE inline in SQL?
Abfrage:
SELECT SuiteID,ParentSuiteID FROM tbl_Suite;
Die resultset ist wie:
SuiteID ParentSuiteID 1 0 4 1 5 4 6 4 7 4 8 4 9 4 10 4 11 4
Jetzt habe ich für eine resultset Suche Wo:
SuiteID ParentSuiteID Level1ParentID 1 0 0 4 1 0 5 4 1 6 4 1 7 4 1 8 4 1 9 4 1 10 4 1 11 4 1
MIT DEM CTE unten, ich bin in der Lage zu hole das Level1Parent, wenn ich die SuiteID
übergebe;WITH HIERARCHY AS
(select T1.SuiteID,T1.Title,T1.ParentSuiteID, 0 Level FROM tbl_Suite(nolock) T1
Where T1.ParentSuiteID = 0 AND T1.PlanID = '404'
UNION ALL
select T2.SuiteID,T2.Title,T2.ParentSuiteID,Level+1
from tbl_Suite(nolock) AS T2
INNER JOIN HIERARCHY AS H
ON T2.ParentSuiteID = H.SuiteID
)
,CTE_A(SuiteID,Title,ParentSuiteID,Level) AS
(
select H2.SuiteId, H2.Title, H2.ParentSuiteId, H2.Level
from Hierarchy H2
--INNER JOIN #X_Temp X
--ON H2.SuiteID = X.SuiteID
where H2.SuiteID = 10820
UNION ALL
select H2.SuiteId, H2.Title, H2.ParentSuiteId, H2.Level
from Hierarchy H2 JOIN CTE_A On H2.SuiteID = CTE_A.ParentSuiteID
)
SELECT SuiteID FROM CTE_A WHERE level = 1
Meine Frage ist:
A) Wie gebe ich die SuiteID als Inline-Unterabfrage auf der rekursiven CTE-Abfrage? B) Wie kombiniere ich das Resultset wie oben gezeigt?
Sie können einen Blick auf diesen Artikel werfen, bevor Sie weiter Ihre Anfragen mit NOLOCK verstreuen. http://blogs.sqlsentry.com/aaronbertrand/bad-habits-nolock-everywhere/ –
Was wirklich helfen würde ist, wenn Sie die ddl für Ihre Tabellen und Beispieldaten zusammen mit der gewünschten Ausgabe bereitstellen könnten.Wie es jetzt ist, ist diese erste Abfrage einfach zu lang und verwirrend zu entziffern und es ist mir überhaupt nicht klar, was Sie zu tun versuchen. Dies wäre ein großartiger Ausgangspunkt. http://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/ –
Hi Sean, in der ersten Abfrage versuche ich das Ergebnisset zu holen was ich beabsichtige Aggregation anzuwenden. Nur die Spalte SuiteID ist für diese Abfrage von Bedeutung, da sie eine Eltern-Kind-Beziehung hat. Daher muss ich für jede SuiteID das Elternelement der zweiten Ebene finden, was das CTE unten tut. Was ich nicht tun kann, ist die Kombination beider Codes, um eine Ausgabe als einzelnes Resultset zu erhalten. – Sharktooth