数据库统计问题
数据库两个表,表1中存储员工名
表2中存储员工工作时间:
张三 3 2005-2-2
李四 4 2005-2-4
王二 2 2005-2-5
张三 1 2005-2-6
王二 3 2005-2-5
李四 2 2005-2-4
。。。。。。
如何统计出一张表,统计出所有员工在某段时间内(比如1月~3月)工作的时间总数?
具体代码怎么写?谢谢!
问题点数:100、回复次数:15Top
1 楼kicck(撒旦之吻)回复于 2005-09-19 18:53:28 得分 0
sql="select * from 表1 where datetime between '" & 起始时间 & "' and '" & 终止时间"'"Top
2 楼kevinworkroom(l.kevin)回复于 2005-09-19 18:54:08 得分 0
给出你的表结构Top
3 楼jfu(谁动了我的奶酪)回复于 2005-09-19 19:07:28 得分 0
表1:
id 员工
1 张三
2 李四
。。。。。。
表2
id 员工 工作时间 日期
1 张三 2 2005-09-07
2 李四 3 2005-09-07
3 李四 3 2005-09-08
.。。。。。。。
Top
4 楼dh20156(风之石)回复于 2005-09-19 19:38:42 得分 100
TRY:
Select a.[员工],Count(b.id) From [表1] a left outer join [表2] b on a.[员工]=b.[员工] Where b.[日期] between '2005-1-1' And '2005-4-1' group by a.[员工]Top
5 楼dh20156(风之石)回复于 2005-09-19 19:41:10 得分 0
Count(b.id) --> IsNull(Count(b.id),0) As workcountTop
6 楼jfu(谁动了我的奶酪)回复于 2005-09-19 20:14:34 得分 0
改成;
Select a.[员工],IsNull(Count(b.id),0) As workcount From [表1] a left outer join [表2] b on a.[员工]=b.[员工] Where b.[日期] between '2005-1-1' And '2005-4-1' group by a.[员工]
吗?
怎么显示全部员工在某段时间内的总共上班时间呢?能不能给出具体点的代码?
Top
7 楼dh20156(风之石)回复于 2005-09-20 09:48:57 得分 0
总共上班时间?哦,没注意有一个工作时间字段,SORRY。
Select a.[员工],IsNull(Sum(b.[工作时间]),0) As workcount From [表1] a left outer join [表2] b on a.[员工]=b.[员工] Where b.[日期] between '2005-1-1' And '2005-4-1' group by a.[员工]Top
8 楼hbhbhbhbhb1021(天外水火(我要多努力))回复于 2005-09-20 09:56:15 得分 0
季度时间判断也可以用
dadediff函数的Top
9 楼jfu(谁动了我的奶酪)回复于 2005-09-20 10:29:52 得分 0
感谢风之石!对你代码还是不是太明白,好像是只做出了条件选择,能不能把循环显示所有员工工作时间的代码也写一下?呵呵!谢谢!Top
10 楼dh20156(风之石)回复于 2005-09-20 10:47:18 得分 0
最后这条语句就可以将所有员工及他们在3个月里的总工作时间啊。看,我把IsNull(Count(b.id),0) As workcount 换成了 IsNull(Sum(b.[工作时间]),0) As workcount ,因为我开始没看到有个[工作时间]的字段。如果你要求所有的那就把Where条件删掉咯。Top
11 楼jfu(谁动了我的奶酪)回复于 2005-09-20 10:56:15 得分 0
那显示的时间是不是rs("workcount")?
下面代码对吗?
代码:
<%
dim conn
dim connstr
connstr="DBQ="+server.mappath("1.mdb")+";DefaultDir=;DRIVER={Microsoft Access Driver (*.mdb)};"
set conn=server.createobject("ADODB.CONNECTION")
conn.open connstr
Set rs = Server.CreateObject("ADODB.Recordset")
sql="Select a.[员工],IsNull(Sum(b.[工作时间]),0) As workcount From [表1] a left outer join [表2] b on a.[员工]=b.[员工] Where b.[日期] between '2005-1-1' And '2005-4-1' group by a.[员工]
"
rs.open sql,conn,3,3
%>
<br><% do while not rs.eof %>
<br><%=rs("员工")%> 共工作 <%=rs("workcount")%> 小时
<%
rs.movenext
loop
%>Top
12 楼dh20156(风之石)回复于 2005-09-20 10:58:46 得分 0
基本上是这样的,你的数据库是ACCESS的,可能有些地方需要去调试一下。Top
13 楼jfu(谁动了我的奶酪)回复于 2005-09-20 10:59:52 得分 0
这里的workcount是虚拟出来的字段,是不是呀?Top
14 楼dh20156(风之石)回复于 2005-09-20 11:03:09 得分 0
As workcount
这么说也可以Top
15 楼jfu(谁动了我的奶酪)回复于 2005-09-20 11:11:37 得分 0
感谢!先给分再说!Top




