假定組織分配員工爲其他員工進行年度審閱。每個ReviewID(誰是員工)都可以通過多個員工ID進行審覈。只有特定評論ID完成了所有評論ID或沒有待審覈ID時,員工纔可以開始/完成評論。 示例數據代碼:如何在SQL服務器中查找Hierarachical訂單
CREATE TABLE FindOrder
(
EmployeeID int
,ReviewID int
)
insert findorder
values (1,3), (1,10), (1,12), (2,3), (2,5), (2,7), (3,0), (4,6), (5, 3), (6,0), (7,0), (10,0), (12,5)
EmployeeIDs什麼都沒有審查(ReviewID = 0)應該是我的第一組清單(3,6,7,10)的。現在可以開始審覈的僱主ID是4,5(應該是我的第二套),因爲他們需要審覈6,3誰沒有審覈ID。這裏不是employeeIDs 1或2,因爲1有reviewID 12,他沒有完成他所有的評論。等等... 如果我還不清楚,請讓我知道。 我想找到0級是(6,10,7,3),1級是(5,4),2級是(2,12),3級是(1)的訂單級別。
我想這CTE找到順序:
;WITH CTE AS
(
SELECT EmployeeID, ReviewID, 0 AS [Level] FROM FindOrder WHERE NETOUT = '0'
UNION ALL
SELECT NN.EmployeeID, NN.ReviewID, [Level]+1 FROM FindOrder nn
JOIN CTE ON NN.ReviewID=CTE.EmployeeID
)
SELECT * FROM CTE
但我得到僱員1 1級和3級僱員1不應該在1的水平來作爲所有員工的脂肪酶1有權審查沒有完成他們的評論,即僱員1應該來,因爲僱員12沒有完成他的評論。 一般來說,在上述遞歸查詢數據的新子集應該過濾僱員1和2 有點棘手解釋,但我希望我清楚現在:(
謝謝,這適用於我的場景 – user2730375
很高興聽到它,請記住接受答案 – dazedandconfused