gpt4 book ai didi

sql-server - 在递归 CTE 下控制兄弟顺序?

转载 作者:行者123 更新时间:2023-12-01 09:00:26 26 4
gpt4 key购买 nike

我有一个 CTE 查询,用于查找主叶和子叶。但我无法控制叶子选择顺序 两个 sibling 之间 :
表中的每一行都声明为:(childID INT ,parentID INT ,NAME NVARCHAR(30),location int)在哪里 location优先排序IFF他们是 sibling 。
所以我有这个树结构:这些对有一个位置优先级:
enter image description here
例如 :

`a` ( location=1) should be before `f` (location=2)
`b` ( location=1) should be before `e` (location=2)
`d` ( location=1) should be **before** `c` (location=2)
问题是我似乎必须 第一个 order by childID为了看到正确的结构(兄弟未排序)。
但是 - 我的 order by 怎么样?应该看起来像这样我将能够看到正确的结构( && 兄弟排序 )?
(在我的例子中: d 应该在 c 之前)
Here is the working query which yields all the tree leafs ( unsorted siblings)
p.s. childID不是 指示有关排序的任何内容。它只是一个占位符。正如我所说,两兄弟之间的位置是 location列。(在这里,childId 是排序的,因为那是我插入行的顺序...

最佳答案

您可以计算 CTE 中树节点的路径并将其用于排序

;WITH CTE AS(
SELECT childID, parentID, 0 AS depth, NAME , location,
cast(location as varbinary(max)) path
FROM @myTable
WHERE childID = parentID
UNION ALL
SELECT TBL.childID, TBL.parentID,
CTE.depth + 1 , TBL.name ,TBL.location,
cte.path + cast(TBL.location as binary(4))
FROM @myTable AS TBL
INNER JOIN CTE ON TBL.parentID = CTE.childID
WHERE TBL.childID<>TBL.parentID
)
SELECT depth, childID, parentID, location, REPLICATE('----', depth) + name
FROM CTE
ORDER BY path

关于sql-server - 在递归 CTE 下控制兄弟顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18036417/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com