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