我有一個標準的表,這sotres父,子類別關係...像這樣。遞歸查詢排序
id, parent, catName, sort
而且我用下面的查詢來創建一個遞歸樹
;WITH cte AS (
SELECT 0 AS lvl, id, catName, parent,levels,sort,
CAST(id AS VARCHAR(128)) AS path
FROM CategoriesMap WHERE parent =0
UNION ALL
SELECT p.lvl + 1, c.id, c.catName, c.parent,c.levels,c.sort,
CAST(p.path + '_' + CAST(c.id AS VARCHAR) AS VARCHAR(128))
FROM CategoriesMap c
INNER JOIN cte p ON p.id = c.parent
)
SELECT
id,
catName AS catName,
lvl,
levels,
path,
parent,
sort
FROM cte
ORDER BY path
,輸出是這樣的形象:
尋找與價值ASP的行。 NET & CLASSIC ASP,這些是技術的最後一片葉子(孩子)>軟件(父母),我想對任何給定父項的最後一個孩子進行排序(最後一位父母)。我可以有一個給定節點的多個父母(最後一個孩子)& 我所關心的是使用「排序」列排序LAST Children(leaf)。
如此基本的「經典Asp」應該在「Asp.Net」之前(最後一列是我的圖片中的SORT列)。
我的查詢很好,它按照預期返回結果......只有challenege是我想要使用表中的SORT列排序最後的NODE,最後一個節點可以有3或4個我想排序的子元素,全部最後一個節點之上的節點是它的父節點(它們的順序已經是正確的)。
I want output like this.... Internet > ISP's > CableVision (1) : Verizon (2) as you can see CableVision & Verizon have Sort Value of 1 & then 2, Now lets say we have Shopping > Coupons > Macys(0) : Sears (2), same thing....I want Macys & Sears to be sorted...and its pretty obvious their parents are Shopping > Coupons.
@Richard又名cyberkiwi,將你的代碼後,我的分揀分類表是很隨意的。輸出低於
我不同意它是隨機的。 11,13,14都是葉子。他們首先出現在分支(1,12分支)之前,甚至在他們自己內部排序。同樣,1_3和1_4出現在1_2_ *之前,因爲它們是葉子,並且(1_3/1_4在內部排序)。如果你想要答案給你你所期望的,你*需要*學會先告訴*你的期望。從最後一張圖片開始,不要只是告訴我們這是錯誤的。告訴我們它應該是什麼樣子。 – RichardTheKiwi
我的道歉,如果我不能正確解釋。請查看ID「1」及其排序值(即1),其父母爲頂級父母類別。另外ID「2」應該在ID「3」之前,如果您查看他們的排序列值,您會注意到排序關閉。 – highwingers
我有一種感覺,除非您發佈的圖像顯示從最後一幅圖像中給出的確切樣本所需的確切結果,否則您不會看到有關此問題的任何其他操作。 – RichardTheKiwi