我正在創建一個SQL Server 2008查詢,該查詢將輸出公司中的員工列表以及他們所在的團隊的附加列。該組織樹SQL - 在遞歸查詢中的SELECT中的CASE中的賦值
例子:
Level 0: CEO
Level 1: A, B, and C
Level 2:
For A:1,2,3
For B:4,5,6
For C:7,8,9
在我的結果集,我應該看到三列 - 名(樹)的水平,和團隊。對於1,2和3,我會看到'A'作爲他們的團隊,2作爲關卡。 4,5和6,'B'和2等級。
我正在使用遞歸查詢來導航樹(沒有問題),但是因爲我需要將查詢中的隊名「攜帶」下來(如果存在級別8,它應該仍然顯示該人員在1水平,他們報告),我這樣做:
(...)
UNION ALL
-- Recursive Member Definition
-- in here level increments one each time, and the team should output the child
-- of the top manager
SELECT A.treenodeid, A.parentnodeid, A.email, LEVEL+1, team =
CASE LEVEL
When 1 then SET @salead = A.Email
Else @salead
END
FROM XX as A
INNER JOIN TeamsTable as B on A.parentnodeid = b.treenodeID
由於我試圖用一個案例來檢查級別爲1(更新隊名到任何團隊領導的電子郵件名稱是),SQL一直說,如果我有「SET附近不正確的語法」。
是否可以在CASE中進行這種分配?我環顧四周,並沒有發現如果這可以與我的遞歸案件。
這裏的所有查詢(假設根是 'JohnSmith對'):
WITH TeamsTable (treenodeid, parentnodeid, email, Level, team)
AS
(
-- Anchor - Level starts with 0, and the team is empty for the top manager
SELECT treenodeid,parentnodeid,email,0,''
FROM XX WHERE email = 'JohnSmith'
UNION ALL
-- Recursive Member Definition - in here level increments one each time, and the team should output the child of the top manager
SELECT
A.treenodeid, A.parentnodeid, A.email, LEVEL+1, team =
CASE LEVEL
When 1 then SET @salead = A.Email
Else @salead
END
FROM XX as A
INNER JOIN TeamsTable as B on A.parentnodeid = b.treenodeID
)
-- Statement that executes the CTE
SELECT *
FROM TeamsTable
非常感謝你們!
這應該作爲一個評論,不是答案 – Beth
我用它在從TeamsTable選擇* - 它應該每行報告:人的電子郵件名稱,人的水平,誰是他們的領袖( salead)是。 – malvenko