SQL语句的编写问题
Access有4张表,人员信息表里是公司所有员工的信息,部门信息表是部门及对应编号信息,职位信息表是职位及对应编号以及该职位允许报账的上限,报账信息表是某人在什么时间报了多少账的记录,详细如下:
人员信息表:
人员编号、姓名、部门编号、职位编号
1、张三、1、1
2、李四、1、2
3、王五、2、1
4、赵六、2、2
5、周七、2、2
部门信息表:
部门编号、部门
1、办公室
2、财务部
职位信息表:
职位编号、职位、报账上限
1、经理、1200
2、一般人员、1000
报账明细表:
记录编号、人员编号、报账日期、报账额
1、2、2011-1-6、300
2、3、2011-2-4、400
3、2、2011-3-4、200
4、5、2011-4-5、700
我在Delphi中用TADOQuery进行查询,想通过一次SQL查询或SQL嵌套查询得到2011年公司全部人员的报账详细信息,结果应如下:
查询结果:
人员编号、姓名、部门、职位、报账上限、已报总额、剩余可报额
1、张三、办公室、经理、1200、0、1200
2、李四、办公室、一般人员、1000、500、500
3、王五、财务部、经理、1200、400、800
4、赵六、财务部、一般人员、1000、0、1000
5、周七、财务部、一般人员、1000、700、300
如何编写SQL查询语句?
本贴与我前一次问的问题相似,但查询的内容不一样。
[解决办法]
- SQL code
select A.人员编号,A.姓名,B.部门,C.职位,C.报账上限,iif(D.amt is null,0,amt) as 已报总额,C.报账上限-iif(D.amt is null,0,amt) as 剩余可报额 from((人员信息表 as A left join 部门信息表 as B on A.部门编号=B.部门编号) Left join 职位信息表 as C on A.职位编号=C.职位编号)left join (select 人员编号,sum(报账额) as amt from 报账明细表 group by 人员编号) as Don A.人员编号=D.人员编号建表字段最好不要用中文