【发布时间】:2021-04-18 22:08:35
【问题描述】:
WITH cteCountDownlines AS
( --=== Count each occurrence of EmployeeID in the sort path
SELECT EmployeeID = CAST(SUBSTRING(h.SortPath,t.N,4) AS INT),
NodeCount = COUNT(*) --Includes current node
FROM dbo.Hierarchy h,
dbo.HTally t
WHERE t.N BETWEEN 1 AND DATALENGTH(SortPath)
GROUP BY SUBSTRING(h.SortPath,t.N,4)
) --=== Update the NodeCount and calculate the RightBower
UPDATE h
SET h.NodeCount = downline.NodeCount,
h.RightBower = (downline.NodeCount - 1) * 2 + LeftBower + 1
FROM dbo.Hierarchy h
JOIN cteCountDownlines downline
ON h.EmployeeID = downline.EmployeeID
;
来自https://www.sqlservercentral.com/articles/hierarchies-on-steroids-1-convert-an-adjacency-list-to-nested-sets。 我尝试了很多方法,但没有奏效。 分开的 cteCountDownlines 和 join 工作得很好,但不知道如何结合它们
【问题讨论】:
-
你的 SQLite 版本是多少?
-
这到底是怎么回事——看起来不错。
-
@forpas 我尝试在 SQLite 中使用 join,但它们都不起作用..而且我完全没有 JOIN 的版本。
标签: sql sqlite sql-update common-table-expression