Ich möchte alle Vorfahren, ausgewählte Kategorie und direkte Kinder darin, und zählen Sie alle Elemente in jeder Kategorie und alle Kinder.So erhalten Sie alle Vorfahren, ausgewählte Kategorie und direkte Kinder in dieser SQL-Abfrage
ist es das, was ich getan habe:
DECLARE @CategoryId INT = 8
;WITH Re AS
(
SELECT CategoryId, Name, ParentId, CategoryId RootId, 0 Depth, Sort = CAST(Name AS VARCHAR(MAX))
FROM Category
WHERE CategoryId = @CategoryId OR ParentId = @CategoryId
UNION ALL
SELECT C.CategoryId, C.Name, C.ParentId, RootId, Depth = Re.Depth + 1, Sort = Re.Sort + CAST(C.Name AS VARCHAR(200))
FROM Re JOIN Category C ON Re.CategoryId = C.ParentId
)
SELECT Y.CategoryId, Y.Name, Y.ParentId, X.CatCount
FROM (SELECT RootId, COUNT(I.CategoryId) catCount
FROM Re LEFT OUTER JOIN Item I ON Re.CategoryId = I.CategoryId
GROUP BY RootId) X
JOIN (SELECT Re.CategoryId, Re.ParentId, Name, MAX(Depth) MaxDepth
FROM Re
GROUP BY Re.CategoryId, Re.ParentId, Name) Y ON Y.CategoryId = X.RootId
ORDER BY CategoryId
gibt es das, was ich will, aber ein kleines Problem ist darin. zum Beispiel, wenn @CategoryId = 8, sollte diese Abfrage angezeigt:
CategoryId Name ParentId CatCount
0 A NULL 16
1 B 0 10
7 H 1 4
8 I 7 2
13 N 8 1
aber es gibt:
CategoryId Name ParentId CatCount
8 I 7 2
13 N 8 1
Vorfahren nicht angezeigt werden, wenn eine Unterkategorie ausgewählt ist.
- Wo ist das Problem?
- Wie wird diese Abfrage optimiert?
Ich werde irgend ein dankbares sein helfen mir
Was ist Ihre Probe Eingangsdaten? –
Beispiel Eingabedaten in dieser Abfrage oder in einer meiner Tabellen? – Masoud
Für diese erwartete Ausgabe –