我有一个标准表,它与父、子类别关系......就像这样。
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 进行排序。对于给定节点(最后一个孩子),我可以有多个父母,我关心的是使用“排序”列对最后一个孩子(叶子)进行排序。
所以基本上“Classic Asp”应该在“Asp.Net”之前(最后一列是我图像中的 SORT 列)。
我的查询很好,它按预期返回结果......唯一的挑战是我想使用表中的 SORT 列对最后一个节点进行排序,最后一个节点可以有 3 或 4 个我想要排序的子节点,所有节点都在最后一个节点之上节点是它的父母(它们的顺序已经正确)。
我想要这样的输出.... Internet > ISP's > CableVision (1) : Verizon (2) 如您所见 CableVision 和 Verizon 的排序值为 1 和 2,现在假设我们有购物 > 优惠券 > Macys(0 ) : Sears (2),同样的事情....我希望对 Macys & Sears 进行分类...而且很明显他们的父母是购物 > 优惠券。
@Richard aka cyberkiwi,在应用您的代码后,我对类别表的排序非常随机。输出低于