2
我有表,幾列&我使用的是CTE在有序地分層,以獲得數據:的SQL Server CTE查詢沒有得到期望的結果
Cat 1
--item X1
--item X2
Cat 2
Cat 3
Cat 4
cat 5
--item A1
--item A2
Cat 6
表數據:
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查詢:
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
上面的查詢隱藏父類,但不是子項。
其次,我只能在名稱中訂購父類別,但不能訂購子項目。
預期的輸出應該是:
Cat 1
--item X1
--item X2
Cat 2
Cat 4
cat 5
--item A1
Cat 6
更新:只是說我不顯示在上面的輸出CTE查詢的所有列下面是查詢的完整輸出
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
要過濾掉'項目A2'記錄你需要使用'WHERE d.Active = 1',而不是'WHERE p.Active = 1' – cha
謝謝,我知道我在做一些我無法看到的錯誤。感謝您指出。請把它是一個答案,以便我可以接受它 – Learning