1

ExcelからAccessに移行し、少し問題がありましたが、誰かが私を助けてくれることを望んでいます。

遭遇データでいっぱいのテーブルがあります(Table: EncData); そのデータの一部は遭遇の日付です(Column: EncDateTime)。

私のクエリでは、その日付が週末平日、または休日であるかどうかを表示する列が必要です。週末と平日の部分は私にとって問題ではありません(運が良かったですFormat())。Encounter DateをHolidayルックアップテーブル(Table: Holidays)に一致させる方法に苦労しています。

Match()Excelでは、休日が返されるかどうかを確認するために使用した数式を使用しました。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についてはほとんど知りませんが、これは簡単なことだと思います。

ありがとう

4

2 に答える 2

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が休日かどうかを確認するには、次のSQL コードを使用して参加EncDataしてください。Holidays

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

これにより、祝日であるすべての 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 コードがどのように見えるかをいつでも確認できます。

于 2012-11-19T21:57:54.043 に答える
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(より高速ですか?) が、これは当分の間機能しています。ありがとう!

于 2012-11-20T15:40:54.353 に答える