1
有描述對象層次和他們類型的表:帶過濾器的MSSQL CTE樹如何?
DECLARE @TTable TABLE
(
ID int
,Higher int -- for some reason this is how ID_PARENT named
,[Type] int
)
,我需要選擇與分支僅包含的某些[類型]節點的子樹。
;WITH c
AS
(
SELECT
ID
,Higher
,[Type]
FROM
dbo.EnObj
WHERE Type = 40
UNION ALL
SELECT
t.ID
,t.Higher
,t.Type
FROM
dbo.EnObj T
INNER JOIN c ON t.ID = c.Higher
)
然後選擇唯一的記錄到表變量:
因爲我在SQL是一個初學者一般和CTE我首先找到所有包含某種類型的對象從底部到頂部的樹枝這樣做INSERT @TTable
SELECT DISTINCT
c.ID
,c.Higher
,c.Type
,c.Name
,c.Voltage
FROM c
然後通過內置的熱膨脹係數與層次結構從頂部排序,以底部:
;WITH CTE AS (
SELECT
ID
,Higher
,[Type]
,CAST(ID AS VARCHAR(128)) AS Sort
FROM
@TTable
WHERE
Higher IS NULL
UNION ALL
SELECT
N.ID
,N.Higher
,N.[Type]
,CAST(P.Sort + '/' + CAST(N.ID AS VARCHAR) AS VARCHAR(128))
FROM
@TTable N
INNER JOIN CTE AS P ON P.ID = N.Higher
)
SELECT
ID
,Higher
,[Type]
,Sort
FROM CTE
ORDER BY Sort
它的工作原理,但我不知道是否有優化這個查詢的方式,就像使用一個CTE我而不是兩個或在CTE中有一個過濾器。
我認爲最後的查詢是相當不錯的。 – Devart
所有方面都轉到這個人:[link](http://beyondrelational.com/modules/2/blogs/28/posts/10486/recursive-cte-and-ordering-of-the-hierarchical-result.aspx) – user1699353
你想獲得特定[Id]下某個[類型]的層次結構嗎?或者所有可能的具有某種[類型]的樹? –