MS-Access中的SQL查询用于排列层次结构中的记录

时间:2011-11-29 10:06:09

标签: sql ms-access

我有一个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级名称的重新出现,可能会更好。任何人都可以修改查询以实现这一目标吗?

1 个答案:

答案 0 :(得分:0)

我可以建议您迁移到SQL Server Express,这是零成本吗?公用表表达式(CTE)可以很好地解决您的问题,因为它可以递归树。