Access问题,如何生成报表或查询两个表没有多对多关系的项目

2025-04-10 09:17:22
推荐回答(1个)
回答1:

以下用sql视图建立查询,若不会用sql视图,请先说access版本。
第一,建立一个全员全项目查询(名叫“基础表”):
SELECT 项目联系人表.姓名, 项目表.项目名称 FROM 项目表, 项目联系人表;

结果:
姓名 项目名称
张三 工程1
张三 工程2
张三 工程3
李四 工程1
李四 工程2
李四 工程3
孙五 工程1
孙五 工程2
孙五 工程3

第二,建立姓名和工程交叉查询,可以直观看到项目及人员的关联情况。
TRANSFORM First(ID联接表.联系id) AS 联系id之第一条记录 SELECT 基础表.项目名称
FROM 基础表 LEFT JOIN ID联接表 ON (基础表.项目名称 = ID联接表.项目) AND (基础表.姓名 = ID联接表.联系人) GROUP BY 基础表.项目名称 PIVOT 基础表.姓名;

结果:
项目名称 李四 孙五 张三
工程1 1
工程2 3 2
工程3

可以看到,张三负责联系工程1 ,记录号是1;工程2同时是张三李四负责联系,记录号是2和3;孙五没有项目;工程3没有联系人

当然,这种方法如果对于大量的数据,就很难看了,就只能分别查询了:
一、查没有工程的人员:
SELECT 项目联系人表.姓名, Count(ID联接表.项目) AS 项目之计数
FROM 项目联系人表 LEFT JOIN ID联接表 ON 项目联系人表.姓名 = ID联接表.联系人
GROUP BY 项目联系人表.姓名
HAVING (((Count(ID联接表.项目))=0));

结果
姓名 项目之计数
孙五 0

二、查没有联系人的项目:
SELECT 项目表.项目名称, Count(ID联接表.联系人) AS 联系人之计数
FROM ID联接表 RIGHT JOIN 项目表 ON ID联接表.项目 = 项目表.项目名称
GROUP BY 项目表.项目名称
HAVING (((Count(ID联接表.联系人))=0));

结果:
项目名称 联系人之计数
工程3 0