2012-11-19 49 views
1

从Excel移动到Access并有一点困难,希望有人能帮助我。我有一张桌子,里面充满了遇到的数据(Table: EncData);部分数据是遇到的日期(Column: EncDateTime)。如何在查询中查找匹配或查找?

在我的查询,我需要有一个显示如果日期是周末平日,或假日列。周末和平日的部分对我来说不是问题(有运气与Format())。我正在努力如何将Encounter Date匹配到Holiday查找表(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知之甚少,但我认为这应该是一个小调。

谢谢

+1

一些关于连接阅读http://www.sitepoint.com/understanding-sql-joins-mysql-database/和一些关于MS Access查询的说明http://stackoverflow.com/questions/13335236/sql-access-内加入-的-4-表/ 13335314#13335314。 Access也有向导。 – Fionnuala

回答

2

SQL中的日期表示为#年/月/日#,例如。今天的日期是#2012/11/19#,并提出使用DLookup工作,你就必须使用这个语法:

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

检查,如果今天是假日,你可以这样做:

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

是的,DLookup很慢,你不应该在查询中使用它。要检查是否EncDateTime是一个节日,你应该加入EncDataHolidays togheter,这个SQL代码:

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仅在该日期为假日时才包含日期,否则它将为空。

这些只是一些基本的想法开始。但不要忘记,你可以使用向导来进行查询,那么你总是可以看到你的SQL代码是什么样的。

+0

非常感谢这次教训 - 我学到了足够的经验。我在下面发布了我的最终代码。我正在使用一个'IIf'声明 - 不知道这是否是最有效的,但它是我现在知道的。谢谢! – thornomad

0

使用fthiella的码建议这里是我终于想出了用IIf语句,以确定是否日期是假日平日,或周末

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语句来代替(他们是更快?),但它的工作暂时。谢谢!