Office中国论坛/Access中国论坛

标题: [讨论]用查询统计员工所在工位作业时间 [打印本页]

作者: zyz218    时间: 2007-9-5 16:21
标题: [讨论]用查询统计员工所在工位作业时间
希望用一个或二个查询实现得出每个员工所在工位作业时间,如
系统编号工号工位能力作业日期
0600001N235电批操作2003-4-23
0600002N235锡点目视2003-5-1
0600003N235手插2003-6-1

N235这个人电批操作8天,锡点目视30天,手插1557(now()-2003-6-1)天,要用到的数据见附件,希望有兴趣的一起讨论一下,呵呵。
作者: zyz218    时间: 2007-9-5 16:54
想了想,实现不了用查询,我现在用的方法是这样的:
系统编号        工号        工位能力        开始日期        结束日期
0600001        N1010        手插        2006-4-19        2006-5-1
0600002        N1010        手动加工        2006-5-1        2006-5-15
0600003        N1010        锡点目视        2006-5-15        2006-7-15
0600004        N1010        焊锡        2006-7-15       
0600005        N1010        部品目视        2006-9-10       
0600006        N1065        手插        2006-7-13        2006-8-1
空白的就用date()去减,这样复杂问题简单化,不知这样是不是最好的?
作者: andymark    时间: 2007-9-5 22:10
一个查询也能实现,结束时间部分显示的问题,自已修改吧
作者: hosam    时间: 2007-9-12 14:33
试一试!!!!!!!!!!!!!
作者: goto2008    时间: 2007-9-12 20:15
学习...
作者: zyz218    时间: 2007-9-12 21:45
andymark,真有才,谢谢了!
作者: zyz218    时间: 2007-9-13 09:14
不能对得出的查询再次进行交叉查询???请andymark关注一下!!
作者: hi-wzj    时间: 2007-9-13 10:15
建议您用2楼的思路来完成。
1楼的方式的优点是,输入简单;缺点是:一旦有记录漏输,不但统计出错,而且不容易被发现。如果工作不能肯定绝对是连续工作的,那更不能用一楼的思路来完成。

如果用2楼的思路来完成,在输入新记录时,用代码寻找之前该工号是否有未完成的记录,有则提示是否用代码同步(也就一个更新查询),就能解决问题。
作者: hi-wzj    时间: 2007-9-13 10:49
gju
作者: hi-wzj    时间: 2007-9-13 10:52
对7楼程序的修订
查询1的sql语句更改为:
SELECT DMin("[作业日期]","表1","[工号]='" & [工号] & "' and [作业日期]> #" & [作业日期] & "#") AS 结束日期, 表1.工号, 表1.作业日期, 表1.工位能力, IIf(IsNull([结束日期]),DateDiff("d",[作业日期],Format(Now(),"yyyy-mm-dd")),DateDiff("d",[作业日期],[结束日期])) AS 天数
FROM 表1
ORDER BY 表1.工号, 表1.作业日期;
作者: zyz218    时间: 2007-9-13 12:02
谢谢WZJ与ANDYMARK的大力支持,在下受益非浅!
作者: andymark    时间: 2007-9-13 12:39
用左联接重写了查询
SELECT c.系统编号, c.工号, c.工位能力, c.作业日期, d.结束日期, IIf(IsNull(d.结束日期),datediff("d",c.作业日期,format(now(),"yyyy-mm-dd")),datediff("d",c.作业日期,d.结束日期)) AS 天数
FROM 表1 AS c LEFT JOIN [SELECT a.系统编号, a.工号, a.工位能力, a.作业日期, min(b.作业日期) AS 结束日期
FROM 表1 AS a INNER JOIN 表1 AS b ON a.工号=b.工号
WHERE b.作业日期>a.作业日期
GROUP BY a.工号, a.系统编号, a.工位能力, a.作业日期
]. AS d ON val(c.系统编号)=val(d.系统编号)
ORDER BY c.工号, c.系统编号;
作者: andymark    时间: 2007-9-13 12:40
整合到交叉表
TRANSFORM Sum(e.天数) AS 天数之总计
SELECT e.工号, Sum(e.天数) AS [总计 天数]
FROM [SELECT c.系统编号, c.工号, c.工位能力, c.作业日期, d.结束日期, IIf(IsNull(d.结束日期),datediff("d",c.作业日期,format(now(),"yyyy-mm-dd")),datediff("d",c.作业日期,d.结束日期)) AS 天数
FROM 表1 AS c LEFT JOIN [SELECT a.系统编号, a.工号, a.工位能力, a.作业日期, min(b.作业日期) AS 结束日期
FROM 表1 AS a INNER JOIN 表1 AS b ON a.工号=b.工号
WHERE b.作业日期>a.作业日期
GROUP BY a.工号, a.系统编号, a.工位能力, a.作业日期
]. AS d ON val(c.系统编号)=val(d.系统编号)
ORDER BY c.工号, c.系统编号]. AS e
GROUP BY e.工号
PIVOT e.工位能力;




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3