我有点新手,但是已经走了很长的路。
我使用Access 2007构建了一个数据库。我有一个显示员工信息的表:
Lname
Fname
Status
HireDate
TermDate
(状态:他们要么是非活动的(潜在的雇佣),要么是活动的或已终止的)
我可以运行一个查询,按雇用日期向我显示所有员工,或运行一个以显示学期日期。
我们希望有一个查询,可以让我们了解一个月内仍有多少名司机。
说Joe Smith于2008年1月1日被聘用,并于2011年5月15日终止。如果我在2011年5月31日运行报告,我将如何构建查询以显示该员工在5月份在那里?
我使用了>=Date()
和其他人。我可以在between #05/01/2011# and #06/01/2011#
下的条件中使用TermDate
,但如果没有日期,则不会显示任何内容。我甚至放下了一条线并添加了“Null”,但仍然没有,或者我得到了所有仍在那里的员工以及那些在约会之前被终止的员工。我不确定我做错了什么。
答案 0 :(得分:1)
我不确定这个过滤条件的逻辑。我认为你的目标是在2011年5月的任何时候识别所有在职人员。我最好的猜测是你需要至少2个条件来识别它们。
HireDate
2011年6月1日之前TermDate
Null或> = 2011年5月1日如果这些条件足够,那么SQL可能相当容易。
SELECT e.Lname, e.Fname
FROM employees_info AS e
WHERE
e.HireDate < #2011-6-1#
AND
(
e.TermDate Is Null
OR
e.TermDate >= #2011-5-1#
);
听起来您正在设计视图中构建查询...这是一个很好且有用的功能。但是,很难描述如何在设计视图中构建该查询。所以我建议你创建一个新的查询,切换到SQL View并粘贴那个SQL文本。将employees_info
替换为您的实际表名,并修复我拼错的任何字段名称。
如果该查询运行没有错误,您可以在设计和SQL视图之间来回切换,在一个视图中进行更改,并检查它在另一个视图中的表示方式。
SQL不必像我编写的那样进行格式化。我选择这种方式希望它能使WHERE
逻辑清晰。如果从“设计视图”对查询进行更改,Access将根据需要重新格式化SQL。但是,格式更改不应该破坏查询。
我使用 yyyy-m-d 格式作为文字日期值。这种格式避免了对哪些部分代表日期和月份的任何可能混淆,例如#05-01-2011#
是否代表5月1日或1月5日。但是,当您更改查询时,Access可能会将它们更改为 mm-dd-yyyy 格式。 (有时它的“有用的”冲动令人讨厌。)
我对一点感到困惑。看来你每个员工有一条记录。如果是这样,并且员工可以出于任何原因离开并在以后重新雇用,则很难在单个记录中捕获不同的雇佣条款。如果您遇到这种情况,您可能需要修改表格设计。
如果我误解了您的数据,请向我们展示一份简短的数据样本,以及您根据该样本从查询中获得的输出。祝你好运。