SQL WHERE子句的三个选项,其中第三个可以是前两个中的任何一个

问题描述 投票:0回答:2

我有一个数据库应用程序(MS Access),其中根据报告的小时数为员工支付的小时数与他们在现场通过指纹进出系统的小时数进行比较。记录指纹冲头的盒子可以给出三个可能的“打孔标记”,这些“打孔标记”是“在”“输出”“自动”。如果保安人员无法选择进入或退出,则数据记录将具有自动标记。

该应用程序通过2个查询在网站上找到总小时数:

1:

WHERE Marker LIKE "in"

2:

WHERE Marker LIKE "out"

然后从特定员工的“外出”打击中减去“输入”打卡。这工作正常,直到我们有一个“自动”拳。在这种情况下,据报告员工在这里0小时。我想过:

WHERE Marker LIKE "out" or "auto"

但我不能肯定地说“自动”标记将是出门时间。有时它应该及时。

Here is a screenshot of a small piece of the data I receive

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

我会喜欢思考和/或集体讨论如何使这项工作;

sql database ms-access
2个回答
1
投票

如果你设置一个新的字段并将其命名为'button_option'并将默认值设置为'auto',那就更好了,然后使用marker就像一个(临时挂衣钩)!!

基本上从button_option记录Marker的回调值 - 如果button_option ='in',Marker = 'in' if button_option = out,Marker = out - 如果"button_option"'auto',则回调将根据Marker中的最后一个值进行反转。这是员工上次选择的内容

然后你在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()函数的示例:

Click HERE to see the Image

你可以使用上面的图像示例来回调值而不创建button_option,但是对你来说会更麻烦和复杂


0
投票

如果它对任何人有帮助,那么我最终做到这一点的方式实际上比我最初做的简单得多。我不得不说出权力,并获得忽略标记的许可,此时我这样做:

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

FROM
0120Monday

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

当然,我必须解释一下,这并不能消除安全人员所造成的错误,只是忽略了它们。对我们来说这就足够了,但是我确实相信THE NEXT SJ的答案会解决这个问题而忽略了这个错误的数据不可接受。

© www.soinside.com 2019 - 2024. All rights reserved.