我有一个标准的表,这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