日期:2014-05-16  浏览次数:20934 次

一个数据查询的问题
我使用access2003,库中有四张表.
第一张表:   部门表包含字段:部门代码,部门名称
第二张表:   人员表包含字段:部门代码,人员工号,姓名,出生,级别.
第三张表:   授权表包含字段:人员工号,授权代码,授权时间
第四张表:   权限表包含字段:授权代码,授权名称

我想通过关联查询,等到一张表显示每一个部门所拥有的授权情况
我该如何建立查询?盼实例,谢谢!

------解决方案--------------------
TRANSFORM iif(Count(权限.授权名称)> 0, "有 ", "无 ")
SELECT 部门.部门名称
FROM ((部门 INNER JOIN 人员 ON 部门.部门代码=人员.部门代码) LEFT JOIN 授权 ON 人员.人员工号=授权.人员工号) LEFT JOIN 权限 ON 授权.授权代码=权限.授权代码
GROUP BY 部门.部门名称
PIVOT 权限.授权名称;

------解决方案--------------------
楼主要求的结果就是生成一张交叉表。

如果格式固定,就用

select
a.部门名称,
iif(sum(iif(d.授权名称= "授权1 ",1,0))> 0, "有 ", "无 ") as 授权1,
iif(sum(iif(d.授权名称= "授权2 ",1,0))> 0, "有 ", "无 ") as 授权2,
iif(sum(iif(d.授权名称= "授权3 ",1,0))> 0, "有 ", "无 ") as 授权3
from ((部门 as a
inner join 人员 as b on b.部门代码=a.部门代码)
left join 授权 as c on b.人员工号=c.人员工号)
left join 权限 as d on c.授权代码=d.授权代码
group by a.部门名称


如果格式不固定,或者权限数不定,就用动态交叉表

transform iif(count(权限.授权名称)> 0, "有 ", "无 ")
select 部门.部门名称
from ((部门
inner join 人员 on 部门.部门代码=人员.部门代码)
left join 授权 on 人员.人员工号=授权.人员工号)
left join 权限 on 授权.授权代码=权限.授权代码
group by 部门.部门名称
pivot 权限.授权名称;