2016-04-07 77 views
1

我最近發現了一箇舊的Microsoft Access數據庫,用於記錄書籍列表並勾選我已閱讀哪些書籍以及哪些年份。查找年份範圍在SQL(Microsoft Access)

目前,這包括一個BOOKS表,其中包含'Read'和'Year'列。產生結果的表的查詢獲取一年柱和計數多少書每年都看,如:

  • 2010:8
  • 2011:10
  • 2012:20

但是,這意味着如果沒有書籍被標記爲已讀,例如2015年,那麼2015年就完全被排除在圖表之外。理想情況下,它將顯示值爲0.

有沒有這樣做的方法?我不介意鑽研SQL本身。到目前爲止,我最初的想法是計算2010年到今年的年數(使用DateDiff),並在某些時候迭代計算閱讀的書籍數量......但我不知道在SQL中是否可行。

+1

您無法通過表中未包含的值進行分組,這就是爲什麼1845不在您的結果集中的原因......我建議您在數據庫中手動管理您想要的年份;最好在結果集中包含所有年份的年份表格,並且每年按照書籍年份加入。 – marlan

回答

3

在您的目標年份範圍內爲每年創建一行數字表。然後LEFT JOIN該表BOOKS,做你的計數...

SELECT n.the_number, Nz(Count(b.Year), 0) AS books_read 
FROM 
    numbers AS n 
    LEFT JOIN BOOKS AS b 
    ON n.the_number = b.Year 
WHERE n.the_number BETWEEN 2010 AND Year(Date()) 
GROUP BY n.the_number; 

注意你不會,如果你的號碼錶格只包含您有興趣在未來幾年需要的WHERE條款。但是一個號碼錶可以有用其他情況下,您可能需要不同範圍的數字。因此,類似的WHERE子句將允許您定位表中包含的特定數字子集。

+1

還沒有看到這個答案,因爲我正在評論... – marlan

+0

我想我想要的是一個更具活力的方式,所以在明年1月1日,那一年會自動添加到表中但如果這是不可能的,這是一個很好的解決方案!謝謝 – Vanita