Ich habe Tabelle mit wenigen Spalten & ich einen CTE bin mit Daten in einer hierarchischen Ordnung in sortierter Weise zu erhalten:SQL Server CTE-Abfrage nicht gewünschtes Ergebnis bekommt
Cat 1
--item X1
--item X2
Cat 2
Cat 3
Cat 4
cat 5
--item A1
--item A2
Cat 6
Tabellendaten:
ID LanguageID Name ParentID Active
----------------------------------------------
1 1 Cat 1 0 1
2 1 item X1 1 1
3 1 item X2 1 1
4 1 cat 2 0 1
5 1 cat 3 0 0
6 1 cat 4 0 1
7 1 cat 5 0 1
8 1 item A1 7 1
9 1 item A2 7 0
10 1 cat 6 0 1
CTE query:
WITH CTE (ID, ParentID, Name, LanguageID, Active, Depth, SortCol) AS
(
SELECT
ID, ParentID, Name, LanguageID, Active, 0,
CAST(ID AS varbinary(max))
FROM
Project
WHERE
ParentID = 0 AND Active = 1
UNION ALL
SELECT
d.ID, d.ParentID, d.Name, p.LanguageID, p.Active, p.Depth + 1,
CAST(SortCol + CAST(d.ID AS binary(4)) AS varbinary(max))
FROM
Project AS d
JOIN
CTE AS p ON d.ParentID = p.ID
WHERE
p.Active = 1
)
SELECT
ID, ParentID, Name, LanguageID, Active, Depth,
REPLICATE(' ', Depth) + Name as HName
FROM
CTE
WHERE
LanguageID = 1 AND Active = 1
ORDER BY
Name
Above Abfrage versteckt die übergeordnete Kategorie, aber nicht die untergeordneten Elemente.
Zweite Ich bin nur in der Lage, Elternkategorie im Namen, aber nicht die Kind Artikel zu bestellen.
sollte voraussichtlich ausgegeben werden:
Cat 1
--item X1
--item X2
Cat 2
Cat 4
cat 5
--item A1
Cat 6
UPDATE: Just zu erwähnen ich die alle Spalten der CTE-Abfrage unten in oben Ausgabe zeige, ist die vollständige Ausgabe der Abfrage
ID ParentID Name LanguageID Active Depth HName
------------------------------------------------------------------
1 0 Cat 1 1 1 0 Cat 1
4 1 item X1 1 1 0 item X1
7 1 item X2 1 1 0 item X2
8 0 cat 2 1 1 1 cat 2
9 0 cat 4 1 1 1 cat 4
10 0 cat 5 1 1 0 cat 5
3 7 item A1 1 1 1 item A1
2 7 item A2 1 1 1 item A2
6 0 cat 6 1 1 0 cat 6
Um den 'Artikel A2' Aufzeichnung Sie müssen herausfiltern verwenden WHERE d.Active = 1 'statt' WHERE p.Active = 1' – cha
Dank, ich weiß, ich machte einige Fehler, den ich nicht sehen konnte. Danke, dass du es aufgezeigt hast. Bitte sagen Sie es ist eine Antwort, so dass ich es akzeptieren kann – Learning