Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL WHERE子句有三个选项,其中第三个选项可能与前两个选项类似_Sql_Database_Ms Access - Fatal编程技术网

SQL WHERE子句有三个选项,其中第三个选项可能与前两个选项类似

SQL WHERE子句有三个选项,其中第三个选项可能与前两个选项类似,sql,database,ms-access,Sql,Database,Ms Access,我有一个数据库应用程序(MS Access),在该应用程序中,通过指纹输入和输出系统,将员工根据报告的工时支付的工时与他们在现场的工时进行比较。记录指纹打孔的框可以给出三个可能的“打孔标记”,它们是“输入”“输出”“自动”。如果保安未能选择进入或退出,则数据记录将有一个自动标记 应用程序通过2个查询查找现场总小时数: 1: 2: 然后从特定员工的“外出”打孔中减去“入”打孔。这很好,直到我们有了“自动”冲床。在这种情况下,据报告该员工在这里工作了0小时。我想做: WHERE Marker LIK

我有一个数据库应用程序(MS Access),在该应用程序中,通过指纹输入和输出系统,将员工根据报告的工时支付的工时与他们在现场的工时进行比较。记录指纹打孔的框可以给出三个可能的“打孔标记”,它们是“输入”“输出”“自动”。如果保安未能选择进入或退出,则数据记录将有一个自动标记

应用程序通过2个查询查找现场总小时数:

1:

2:

然后从特定员工的“外出”打孔中减去“入”打孔。这很好,直到我们有了“自动”冲床。在这种情况下,据报告该员工在这里工作了0小时。我想做:

WHERE Marker LIKE "out" or "auto"
但我不能确定“自动”标记器是否会超时。有时它应该是及时的

输入输出标记在这里称为“模式”


我喜欢思考和/或集思广益,探讨如何使这项工作发挥作用

如果您设置一个新字段并将其命名为“
按钮”选项
”,并将默认值设置为“
自动
”,然后像(临时衣钩)一样使用
标记

基本上从按钮(u)选项
-如果按钮选项='in' ,
Marker='in'
如果按钮选项=out,
Marker=out


-如果
“按钮”选项“
“自动”
则回调将根据
标记中可用的最后一个值进行反转。
这是员工上次选择的

然后,您在
ms access>sql
中的自动录制过程应该如下所示:

iif (button_option= 'auto' && Marker = 'in', "out", "in");
逻辑上意味着:

If [button_option] = 'auto' && [Marker] = 'in' Then
  Marker = "out"
Else
  Marker = "in"
End If
翻译:

if employee set the button auto -AND- his last choice was 'out' then he should be 'in' cause he cant be out twice without in !!  
在Microsoft Access中的查询中使用iif()函数的示例:


您也可以使用上面的图像示例来回调值,而无需创建button_选项,但这对您来说将更加混乱和复杂

如果它对任何人都有帮助,那么我最终这样做的方式实际上比我原来做的要简单得多。我必须与当权者交谈,并获得忽略标记的许可,在这一点上我做到了:

SELECT 
[0120Monday].[Employee ID],
MAX(TimeValue([0120Monday].PunchTime)) AS OutTime, 
MIN(TimeValue([0120Monday].PunchTime)) AS InTime

FROM
0120Monday

GROUP BY
[0120Monday].[Employee ID];

当然,我必须解释,这并不是消除安全官员制造的错误,只是忽略它们。对我们来说,这就足够了,但是我相信,如果忽略这段错误百出的数据是不可接受的,下一个SJ的答案本可以解决问题。

如果没有样本数据和期望的结果,你的问题毫无意义。是否有多个“班次”,其中一个是否跨越午夜,因此日期发生了变化?您需要覆盖样本数据中的所有班次。如果您已经使用了两个后续的“自动”怎么办?实际上并没有明显的班次,只是有人出现和保安按下进出按钮的记录。问题是他们经常不能点击一个按钮,这就给了“自动”。@Gustav另一个好问题,我将在下面给出答案,看看它是否能在两个地方处理这三个选项的所有可能情况。我甚至有过两次进站和两次出局,有一次是1进2出,这是不应该发生的,但既然是这样,我就必须处理它。我觉得这是一个正确的轨道,也许我添加到OP中的屏幕截图会有所帮助?好的示例记录是针对员工ID 1350的。他显然是在“自动”冲锋时离开的。如果我正确理解了你的答案,我需要在将打孔类型拆分为单独查询中的in和out之前返回,而不是在单个查询中使用If IIf语句?
if employee set the button auto -AND- his last choice was 'out' then he should be 'in' cause he cant be out twice without in !!  
SELECT 
[0120Monday].[Employee ID],
MAX(TimeValue([0120Monday].PunchTime)) AS OutTime, 
MIN(TimeValue([0120Monday].PunchTime)) AS InTime

FROM
0120Monday

GROUP BY
[0120Monday].[Employee ID];