我有一个MS-access数据库,其中包含以下列
Userid(主键)
用户名
Userparent(这只是当前用户老板用户的用户ID)
userlevel(这是层次结构中当前用户的位置)
只有3个级别。例如,如果Tom和Jerry为Bob工作,bob和bill为Steve工作,那么表中的数据将如下所示:
Userid,Username,Userparent,userLevel(这些是col标题)
1,史蒂夫,0,1
2,Bob,1,2,
3,汤姆,2,3, 4,Jerry,2,3,5,Bill,1,2
我需要在MS-Access 2003中使用SQL查询来将数据排列在一个包含3列的新表中。 Level1,level2,level3。子级员工将立即出现在更高级别之下。像这样。
Level1,Level2,Level3(这些是col标题)
史蒂夫,NULL,NULL
空,鲍勃,空
NULL,NULL,汤姆
NULL,NULL,杰里
空,比尔,空
由于访问不支持递归查询,我被卡住了。你能帮帮我吗?非常感谢提前
经过一个小时的尝试,我最接近的就是使用这个SQL查询:
Select y.Level1, x.Level2, x.Level3
FROM
(Select ID, Empname as Level1 from Table1 where level=1)y
right outer join
(select b.FirstLevelID, b.Level2, a.Level3 from
(select ParentID as SecondLevelID, Empname as Level3 from Table1 where level = 3)a
right outer Join
(select ParentID as FirstLevelID, ID, Empname as Level2 from Table1 where level = 2) b
on a.SecondLevelID = b.ID)x
ON y.ID = x.FirstLevelID
以这种方式显示结果,
Level1,level2,level3(这些是标题)
史蒂夫,鲍勃,杰里
史蒂夫,鲍勃,汤姆
Steve,Bill,null
这可以正确地建立关系,但如果我可以多次删除1级和2级名称的重新出现,可能会更好。任何人都可以修改查询以实现这一目标吗?
答案 0 :(得分:0)
我可以建议您迁移到SQL Server Express,这是零成本吗?公用表表达式(CTE)可以很好地解决您的问题,因为它可以递归树。