2013-03-03 152 views
1

我有兩張表,指南可用性指南是指南的列表,並且可用性是針對特定指南瞭解信息的日期的列表。例如03/03/14 - 指南3 - 可用05/03/14 - 指南1 - 忙碌。如果指南在某一天的可用性尚不清楚,那麼當天沒有條目可用性Access中的查詢(添加缺失值)

我想編寫一個查詢,以便在接下來的三天內返回所有指南的狀態列表。如果狀態未知,則會說未知

我確定在SQL中,這個任務肯定是可行的,但是我必須在Access 2013中編寫一個Web應用程序而受到限制。這意味着我必須在Access中使用查詢編輯器。任何有專業知識的人都可以提供一些指導嗎如果問題中有任何不清楚的地方,請這樣說。

Example query output: 
03/03/2013 - Guide 1 - Busy 
03/03/2013 - Guide 2 - Unknown 
03/03/2013 - Guide 3 - Unknown 
04/03/2013 - Guide 1 - Available 
04/03/2013 - Guide 2 - Available 
04/03/2013 - Guide 3 - Unknown 
05/03/2013 - Guide 1 - Unknown 
05/03/2013 - Guide 2 - Unknown 
05/03/2013 - Guide 3 - Unknown 

Table: Guides 
Guide 1 
Guide 2 
Guide 3 

Table: Availability 
03/03/2013 - Guide 1 - Busy 
04/03/2013 - Guide 1 - Available 
04/03/2013 - Guide 2 - Available 

P.S:有人建議我可能需要做出第三個表列出了所有用於未來10年的日期。如果它有助於解決方案,這不會是一個問題

+0

數據庫引擎將使用哪些數據源爲您提供具有Mar 5 2013日期的行?這個日期不存在於你的任何一張表格中,但它必須來自某個地方。你有單獨的日曆表,每日有一行嗎?如果不是,你會願意創建一個嗎? – HansUp 2013-03-03 15:19:24

+0

指南和可用性表之間是否存在關係? – DevelopmentIsMyPassion 2013-03-03 15:19:32

+0

@HansUp如果有必要,我不介意創建一個包含很長日期列表的表格。不過,如果這也可以,我寧願用第二個查詢來完成。 – 2013-03-03 15:24:51

回答

1

如果您僅限於訪問,您將無法使用遞歸CTE(如果感興趣,可以通過谷歌瞭解它們)。

因此,您將不得不創建一個包含所有日期的表格。如果該表名爲AllDates,並且日期字段爲Dte,則查詢將如下所示(您可能需要按日期範圍進行過濾以限制返回的行數,否則您將看到所有10年的記錄):

SELECT Availability.Dte, Availability.Guide, Availability.Status 
FROM Availability INNER JOIN Guides ON Availability.Guide = Guides.Guide 
UNION ALL 
SELECT AllDates.Dte, Guides.Guide, 'Unknown' AS Status 
FROM AllDates, Guides 
WHERE NOT EXISTS (SELECT 1 FROM Availability WHERE Availability.Dte = AllDates.Dte And Availability.Guide = Guides.Guide) 
ORDER BY 1, 2; 

對於網絡版Access,您需要使用2個查詢。第一個(DatesGuides)將列出所有指南所有日期,並作爲其語法很簡單:

SELECT Guides.Guide, AllDates.Dte 
FROM AllDates, Guides; 

第二個查詢將剩下的第一個連接。它的語法是:

SELECT DatesGuides.Dte, DatesGuides.Guide, Nz([Status],'Unknown') AS Expr1 
FROM Availability RIGHT JOIN DatesGuides ON Availability.Dte = DatesGuides.Dte AND Availability.Guide = DatesGuides.Guide; 
+0

非常感謝。我不知道這將會轉化爲視覺查詢編輯器。你看到的麻煩是我甚至無法打開SQL輸入框,並且必須在看起來像這樣的系統中執行所有操作http://blogs.office.com/resized-image.ashx/__size/550x0/__key /CommunityServer-Blogs-Components-WeblogFiles/00-00-00-00-53/7752.QueryAccess.png)。當然會有一個去。 – 2013-03-04 02:13:03

+0

而像這樣的系統應該有一個「查看」按鈕,它有幾個選項,其中包括「SQL」 – cha 2013-03-04 02:54:21

+0

恐怕它沒有。有了桌面數據庫,它會完全禁用Access 2013 Web Apps。 – 2013-03-04 04:05:55