Ms-Access
如何在不創建循環引用的情況下在 Access 中查詢此數據
我有兩個名為
Events
and的表EventSeasons
。Events
定義可能存在的主要事件類型,並EventSeasons
儲存事件每年發生的次數。我正在嘗試查詢它們,以便我可以找出哪些正在進行(在一系列日期之間),但我的問題是我還需要追溯將相同事件類型的過去季節標記為 active。下圖顯示了輸出應該是什麼:您可以在EventSeason
該IsActive
列中看到項目 2003 為真。因此,Events
在 Subactive 列中,項目 1001 (Summer) 為 True。最後在EventSeasons
Retroactive 列中將所有 1001 項設置為 true。我實際上已經在 Excel 中實現了這一點,但現在我試圖在訪問中做到這一點,我覺得我要創建一個循環引用。我在 excel 中所做的是,如果今天的日期在範圍之間,則將 true 分配給 in,然後如果存在目前標記為活動的實例,我將
IsActive
true分配給in 。然後我最終分配給 true if is true or is true。EventSeasons``Subactive``Events``EventID``EventSeason``RetroActive``Subactive``IsActive
通過使用視圖而不是嘗試將計算列添加到表中來完成您嘗試做的事情可能是最簡單的。
EventTheme_IsActive
SELECT ThemeID, EventID, StartDate, FinishDate, IIf(Date()>=StartDate And Date()<=FinishDate,True,False) AS IsActive FROM EventTheme;
Events_Subactive
SELECT e.EventID, e.Name, et.Subactive FROM Events AS e LEFT JOIN ( SELECT EventID, IIF(COUNT(*) > 0, True, False) AS Subactive FROM EventTheme_IsActive WHERE IsActive = TRUE GROUP BY EventID) AS et ON e.EventID = et.EventID;
Events_RetroActive
SELECT et.ThemeID, et.EventID, et.StartDate, et.FinishDate, et.IsActive, a.RetroActive FROM EventTheme_IsActive AS et LEFT JOIN ( SELECT EventID, IIF(COUNT(*) > 0, TRUE, FALSE) AS RetroActive FROM EventTheme_IsActive WHERE IsActive = TRUE GROUP BY EventID) AS a ON et.EventID = a.EventID;
這些視圖可能無法更新,但如果您只需要讀取權限,那麼這應該適合您的需要。