注册 登录
编程论坛 VB6论坛

续---数据库内数据统计问题

ictest 发布于 2019-02-12 10:16, 2622 次点击
目前我已经用如下语句分别得到不同表单,请问如何能合并成一个总的表?
1、工作日加班
程序代码:
  Adodc2.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + App.Path & "\考勤.mdb;Persist Security Info=False"
  Adodc2.RecordSource = "SELECT 序号,姓名,SUM(加班小计) as 工作日加班 FROM 考勤 WHERE (right(星期,1)<>'六' and right(星期,1)<>'日') GROUP BY 序号,姓名"
  Adodc2.Refresh
  Set DataGrid2.DataSource = Adodc2

只有本站会员才能查看附件,请 登录


2、双休日加班
  Adodc2.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + App.Path & "\考勤.mdb;Persist Security Info=False"
  Adodc2.RecordSource = "SELECT 序号,姓名,SUM(加班小计) as 双休加班 FROM 考勤 WHERE right(星期,1)='六' or right(星期,1)='日' GROUP BY 序号,姓名"
  Adodc2.Refresh
  Set DataGrid2.DataSource = Adodc2

只有本站会员才能查看附件,请 登录


3、统计表
  Adodc2.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + App.Path & "\考勤.mdb;Persist Security Info=False"
  Adodc2.RecordSource = "SELECT 序号,姓名,SUM(加班小计) as 加班小计,SUM(休假) as 休假,SUM(早班时间) as 早班时间,SUM(中班时间) as 中班时间,SUM(夜班时间) as 夜班时间 FROM 考勤 GROUP BY 序号,姓名"
  Adodc2.Refresh
  Set DataGrid2.DataSource = Adodc2

只有本站会员才能查看附件,请 登录



现在,想把这几张表合成一张表,如下图所示(不好意思,是画图拼接出来的):
只有本站会员才能查看附件,请 登录


请问,用什么语句,怎样写法,才能合并出上面这张表呢?

或者说,如何将以上的语句合并写,直接生成上面这张表呢?


恳求版主和路过的坛友在百忙中抽出点时间帮帮我,谢谢!

[此贴子已经被作者于2019-2-12 10:31编辑过]

10 回复
#2
ictest2019-02-12 16:23
恳求版主和路过的坛友在百忙中抽出点时间帮帮我,谢谢!
#3
wmf20142019-02-12 17:15
INNER JOIN 连接多表
#4
ictest2019-02-12 19:10
以下是引用wmf2014在2019-2-12 17:15:31的发言:

 INNER JOIN 连接多表

能麻烦您把语句帮忙写一下吗?刚接触数据库不久,以上的语句还是废了九牛二虎之力才搞出来的。谢谢了谢谢了。
#5
风吹过b2019-02-13 08:30
看了一下你的数据是 MDB 格式的。
因这个电脑上没有相关软件,说个思路吧!

在 MDB 里存在 一种对象,叫查询 。
你把你前面几项的查询命令 做成查询 。
然后 再 联合查询 这几个查询 得出结果,这条查询命令写在程序里得到结果,但可以在 access 再写查询检查命令是否正确。
写这个命令,可以使用 access 的向导来做。
#6
ZHRXJR2019-02-13 09:01
你的三个表使用的是同一个数据表,而且工作日加班、双休日加班的条件语句有冲突,因此想使用原来的数据表生成一个表恐怕不可能。
既然能够生成 工作日加班、双休日加班 及 统计表,将生成的这三个表合并成一个数据表,就解决问题了。
#7
wmf20142019-02-13 09:11
如果不涉隐私的话,可以提供你的数据库试试(实在不愿模拟一个类似数据库,还要输入一大堆模拟数据),应该可以完成。针对6楼疑问,我觉得可以用子查询解决(或者叫查询嵌套)。
#8
ictest2019-02-13 14:34
以下是引用wmf2014在2019-2-13 09:11:12的发言:

如果不涉隐私的话,可以提供你的数据库试试(实在不愿模拟一个类似数据库,还要输入一大堆模拟数据),应该可以完成。针对6楼疑问,我觉得可以用子查询解决(或者叫查询嵌套)。


我的程序和数据库在这里,请移步至此处。
只有本站会员才能查看附件,请 登录
#9
wmf20142019-02-13 15:07
回复 8楼 ictest
那个里面的mdb没有数据
#10
ictest2019-02-13 15:36
回复 9楼 wmf2014
嗯,运行程序,第一个按钮就是把数据导入mdb。另外mdb是之前做的,里面字段类型可能有错误,加班小计,早班时间等字段应该从文本改成双精度数字。
#11
wmf20142019-02-13 17:32
同表子查询需要用到表别名,否则无法使用条件查询,sql语句“SELECT 姓名,(SELECT SUM(加班小计) FROM 考勤 as a WHERE (right(星期,1)='六' or right(星期,1)='日') and a.姓名=考勤.姓名) as 双休加班,(SELECT SUM(加班小计) FROM 考勤 as a WHERE right(星期,1)<>'六' and right(星期,1)<>'日' and a.姓名=考勤.姓名) as 工作日加班, SUM(加班小计) as 加班小计1,SUM(休假) as 休假1,SUM(早班时间) as 早班时间1,SUM(中班时间) as 中班时间1,SUM(夜班时间) as 夜班时间1 FROM 考勤 GROUP BY 姓名”可以达到你的需求,在mdb查询中运行通过,效果图如下:
只有本站会员才能查看附件,请 登录

1