【问题标题】:SQL query in MS-Access to arrange records in a hierarchyMS-Access 中的 SQL 查询以在层次结构中排列记录
【发布时间】:2011-11-29 19:35:39
【问题描述】:

我有一个 MS-access 数据库,其中包含以下列

用户名(主键)

用户名

Userparent(这只是当前用户老板的用户的用户ID)

userlevel(这是当前用户在层次结构中的位置)

只有 3 个级别。例如,如果 Tom and Jerry 为 Bob 工作,而 bob 和 bill 为 Steve 工作,那么表中的数据将如下所示:

Userid ,Username,Userparent ,userLevel(这些是col headers)

1, 史蒂夫, 0, 1

2,鲍勃,1、2

3, 汤姆, 2, 3

4、杰瑞、2、3

5、比尔、1、2

我需要在 MS-Access 2003 中使用 SQL 查询将数据排列在一个新表中,该表将具有 3 列。一级,二级,三级。并且子级别的员工将出现在更高级别的正下方。像这样。

Level1,Level2,Level3(这些是 col 标题)

史蒂夫,空,空

空,鲍勃,空

空,空,汤姆

空,空,杰里

null,Bill,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(这些是标题)

史蒂夫,鲍勃,杰瑞

史蒂夫,鲍勃,汤姆

史蒂夫,比尔,空

这可以正确建立关系,但如果我可以多次删除 1 级和 2 级名称的重新出现,可能会更好。任何人都可以修改查询来实现吗?

【问题讨论】:

  • 显示一次名称是一个演示问题,我认为不是查询问题。

标签: sql ms-access


【解决方案1】:

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

【讨论】:

  • 我的客户太固执,无法转储 MS-access :'(
  • SQL Server Express 不是零成本,有维护成本。几乎任何用户都可以维护访问权限,而 SQL Server Express 则不能。此外,您仍然需要一个前端,所以我认为单个查询是不够的,除非有另一个大的原因需要更改。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-10
  • 2018-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多