SQL语句的编写问题

cupidvenus 2012-09-23 08:32:00
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查询语句?
本贴与我前一次问的问题相似,但查询的内容不一样。
...全文
126 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
oa2008032220 2012-09-24
  • 打赏
  • 举报
回复
Access用的少,用sql server给你编一个。测试通过了再发上来。。
kaikai_kk 2012-09-24
  • 打赏
  • 举报
回复
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 D
on A.人员编号=D.人员编号

建表字段最好不要用中文
cupidvenus 2012-09-24
  • 打赏
  • 举报
回复
谢谢kaikai_kk
cupidvenus 2012-09-23
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
哥们你没说清楚吧,你要是什么结果啊,是2011年所有明细帐目,还是按人汇总一年数据,另外你的上限是什么意思,是一年的,还是一个月.
如果是一年的汇总,建议建个临时表,然后在用GROUP BY 人员编号,汇总数据,
总之,不是很明白你的意思.
[/Quote]

就是查询出每个员工的编号、姓名、部门、职位、报账上限、已报总额、剩余可报额。
报账上限是一个员工一年可以报账的上限。
僵哥 2012-09-23
  • 打赏
  • 举报
回复
新的access不太了解,只知道旧的access不支持多表查询,需要在access内部建立查询(Query,类似于视图)
luck8000 2012-09-23
  • 打赏
  • 举报
回复
哥们你没说清楚吧,你要是什么结果啊,是2011年所有明细帐目,还是按人汇总一年数据,另外你的上限是什么意思,是一年的,还是一个月.
如果是一年的汇总,建议建个临时表,然后在用GROUP BY 人员编号,汇总数据,
总之,不是很明白你的意思.

2,498

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧