Ms-Access

如何在不創建循環引用的情況下在 Access 中查詢此數據

  • December 17, 2018

我有兩個名為Eventsand的表EventSeasonsEvents定義可能存在的主要事件類型,並EventSeasons儲存事件每年發生的次數。我正在嘗試查詢它們,以便我可以找出哪些正在進行(在一系列日期之間),但我的問題是我還需要追溯將相同事件類型的過去季節標記為 active。下圖顯示了輸出應該是什麼:查詢事件斷言您可以在EventSeasonIsActive列中看到項目 2003 為真。因此,Events在 Subactive 列中,項目 1001 (Summer) 為 True。最後在EventSeasonsRetroactive 列中將所有 1001 項設置為 true。

我實際上已經在 Excel 中實現了這一點,但現在我試圖在訪問中做到這一點,我覺得我要創建一個循環引用。我在 excel 中所做的是,如果今天的日期在範圍之間,則將 true 分配給 in,然後如果存在目前標記為活動的實例,我將IsActivetrue分配給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;

這些視圖可能無法更新,但如果您只需要讀取權限,那麼這應該適合您的需要。

引用自:https://dba.stackexchange.com/questions/224173