我一直在忽视这一点,但没有任何成功......我有以下自我表彰的表(Table A
):
ID |EmployeeID | ParentID | Level |
1 |11 | null | A |
2 |12 | 11 | B |
3 |13 | 12 | C |
4 |14 | 12 | C |
(它不是很好的构建,但我们不能再改变它了)
我需要创建一个提供以下结果的视图:
ID | EmployeeID | Level | LevelA | LevelB | LevelC | LevelD
1 | 11 | A | 11 | null | null | null
2 | 12 | B | 11 | 12 | null | null
3 | 13 | C | 11 | 12 | 13 | null
4 | 14 | C | 11 | 12 | 14 | null
ID
,EmployeeID
和Level
直接来自Table A
。
Level A - D
给出EmployeeID
的父级和层次结构中的下一个父级。如果员工级别为C,则可以说它是C级员工,因此他的ID位于LevelC列中。他的父母是B级员工,所以他的ID来自LevelB。他的专利是A级员工(排名最高),他的ID列在LevelA栏目中。
空白级别只保留null
。
任何想法/建议?
答案 0 :(得分:1)
我认为你需要这样的东西:
exactPar
只要您有四列,此代码就可以正常工作,但您会在与枢轴不匹配的列中看到空值。 希望它有所帮助。
答案 1 :(得分:0)
使用公用表表达式(CTE)
With MyCTE
As (SELECT EmployeeID, ParentID, Level
FROM tableA
WHERE ParentID IS NULL
UNION ALL
SELECT EmployeeID, ParentID, Level
FROM tableA a join MyCTE c
ON c.EmployeeID = a.ParentID
WHERE a.ParentID IS NOT NULL )
SELECT * FROM MyCTE
你甚至不需要表格中的Level列
With MyCTE
As (SELECT EmployeeID, ParentID, 1 Level
FROM tableA
WHERE ParentID IS NULL
UNION ALL
SELECT a.EmployeeID, a.ParentID, Level + 1 Level
FROM tableA a join MyCTE c
ON c.EmployeeID = a.ParentID
WHERE a.ParentID IS NOT NULL )
SELECT * FROM MyCTE
只需添加额外的列,即可使用Pivot,