如何在查询中找到匹配项或查找项?

时间:2012-11-19 21:07:19

标签: sql ms-access lookup

从Excel迁移到Access并遇到一些困难,我希望有人可以帮助我。

我有一个充满遇到数据的表(Table: EncData);该数据的一部分是遭遇日期(Column: EncDateTime)。

在我的查询中,我需要有一个列,显示该日期是 Weekend Weekday 还是 Holiday 。周末和工作日部分对我来说不是问题(幸运的是Format())。我正在努力解决如何将遭遇日期与假日查找表(Table: Holidays)相匹配的问题。

在Excel中,我使用了一个使用Match()的公式来查看它是否返回了假期。我如何在Access中执行此操作?

TABLE: Holidays
ID__________HolidayDate
1           10/8/2012
2           9/3/2012

TABLE: EncData
ID__________EncDateTime__________________More Data
12          10/08/2012 09:15:12 AM       (etc)

在我的查询中(显示来自EncData表的信息),我一直在玩DLookup而没有成功只是为了看看我是否能找到匹配项:

DLookup("HolidayDate", "Holidays", "HolidayDate =" & Format([EncDateTime],"mm/dd/yyyy"))

即使这不起作用,我也可以说它也很慢。

对SQL知之甚少,但我认为这应该很简单。

由于

2 个答案:

答案 0 :(得分:2)

SQL中的日期表示为#year / month / day#,例如。今天的日期是#2012/11/19#,要使DLookup工作,你必须使用这种语法:

DLookup("HolidayDate", "Holidays", "HolidayDate=" & Format([EncDateTime],"\#yyyy/mm/dd\#"))

要检查今天是否是假日,您可以使用此:

DLookup("HolidayDate", "Holidays", "HolidayDate=" & Format(Date(),"\#yyyy/mm/dd\#"))

是的,DLookup很慢,你不应该在查询中使用它。要检查EncDateTime是否为假期,您应该使用此SQL代码加入EncDataHolidays togheter:

SELECT EncData.*
FROM EncData INNER JOIN Holidays ON EncData.EncDateTime = Holidays.HolidayDate

这应该返回所有作为hoildays的EncData行。它应该,但它可能没有。请注意,EncDateTime不仅包含日期,还包含时间,因此它与仅包含日期的HolidayDate不匹配。这适用于:

SELECT EncData.*
FROM EncData INNER JOIN Holidays ON DateValue(EncData.EncDateTime) = Holidays.HolidayDate

并提取EncData中的所有行,而不仅仅是假期?

SELECT EncData.*, Holidays.HolidayDate
FROM EncData LEFT JOIN Holidays ON DateValue(EncData.EncDateTime) = Holidays.HolidayDate

请注意,当HolidayDate仅在该日假日时包含日期时,否则它将为NULL。

这些只是一些基本的想法。但是不要忘记您可以使用向导进行查询,然后您可以随时查看SQL代码的外观。

答案 1 :(得分:0)

在这里使用fthiella的代码建议是我最终使用IIf语句来确定日期是 Holiday Weekday ,或 Weekend

SELECT EncData.*, 
IIf(ISNULL(Holidays.HolidayDate),IIf(Weekday(EncData.EncDateTime) = 1 or Weekday(EncData.EncDateTime) = 7,"Weekend","Weekday"),"Holiday") AS [DayType]
FROM EncData
LEFT JOIN Holidays ON DateValue(EncData.EncDateTime)=Holidays.HolidayDate; 

我不确定我是否应该使用CASE语句(它们更快吗?)但这暂时有效。谢谢!