2013-04-06 87 views
0

我對建設這個有點新,但已經走了很長的路。查詢顯示給定時間範圍內的在職員工

我已經建立了使用Access 2007年。我有一個表,顯示員工信息分貝:

Lname 
Fname 
Status 
HireDate 
TermDate 

(狀態:他們要麼無效(應聘者),活動或終止)

我可以運行一個查詢,通過聘用日期向我顯示所有員工,或者運行一個查看期限日期。

我們希望有一個查詢,會給我們帶來多少司機仍然存在一個給定的一個月內計數。

說喬史密斯在01/01/2008聘用,並於2011年5月15日終止。如果我在2011年5月31日發佈了一份報告,我將如何構建查詢以顯示此員工在五月份在那裏?

我已經使用>=Date()等。我可以在TermDate下的標準中使用between #05/01/2011# and #06/01/2011#,但是如果沒有日期,則什麼都沒有顯示。我甚至放棄了一條線,並添加了「空白」,但仍然沒有任何結果,或者我得到了所有仍在那裏的員工以及在日期之前終止的員工。我不知道我做錯了什麼。

回答

1

我不確定這個過濾器標準的邏輯。我認爲你的目標是確定2011年5月任何一部分員工中的所有司機。我最好的猜測是你至少需要2個條件來識別他們。

  • 之前6月1日HireDate,2011
  • 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# 
    ); 

這聽起來像你在設計視圖中構建查詢......這是一個很好的和有用的功能。但是,很難描述如何在Design View中構建該查詢。所以我建議你創建一個新的查詢,切換到SQL視圖並粘貼該SQL文本。將employees_info替換爲您的實際表名,並修復拼錯的所有字段名稱。

如果該查詢無差錯運行,你可以來回翻轉設計和SQL視圖之間,做出改變的一個,並研究它是如何在其他視圖表示。

SQL不必按我寫它的方式進行格式化。我選擇了這種方式,希望能夠使WHERE邏輯清晰。如果您從Design View對查詢進行了更改,則Access會根據其認爲合適的格式重新格式化SQL。但是,格式更改不應該打破查詢。

我使用yyyy-m-d格式爲文字日期值。該格式可以避免任何可能的混淆,例如#05-01-2011#是代表5月1日還是1月5日。但是,當您更改查詢時,Access可能會將它們更改爲mm-dd-yyyy格式。 (有時它的衝動很煩人。)

我對一點感到困惑。看起來你每個員工有一個記錄。如果是這樣,並且僱員可以因任何原因離職並在以後重新僱用,那麼很難在單一記錄中捕捉不同的僱傭條款。如果您遇到這種情況,您可能需要修改表格設計。

如果我誤解了您的數據,請向我們展示一個簡短的數據樣本,並根據該樣本查詢您想要的查詢結果。祝你好運。

+0

聽起來不錯!我會努力工作並回復你。我們每個月都會運行這個查詢,所以我將不得不每月更改日期。 – 2013-04-06 15:31:28

+0

對於該查詢,是的。但是,您可以在提供日期值作爲參數的情況下創建不同的查詢,以指示您希望查詢評估的日期的開始和結束範圍。這超出了你在這個問題中提出的範圍。當你準備好處理這樣的事情時,請提出一個新問題,並且請包括一組相關的樣本數據和你想要的樣本輸出。 – HansUp 2013-04-06 15:36:59

+0

其實你可以通過搜索[tag:ms-access]和參數查詢來找到足夠的信息。在提交新問題前先做這件事。 – HansUp 2013-04-06 15:43:52