我最近发现了一个旧的Microsoft Access数据库,用于记录书籍列表,并勾选我读过哪些书籍以及在哪一年。
目前,这包括一个BOOKS表,其中包含“Read”和“Year”列。生成结果表的查询获取年份列,并计算每年读取的书籍数量,例如:
然而,这意味着如果没有图书被标记为已读入,例如2015年,那么2015就完全不在图表之外。理想情况下,它会显示值为0.
有没有办法做到这一点?我不介意深入研究SQL本身。到目前为止,我最初的想法是计算从2010年到当年的年数(使用DateDiff),并以某种方式迭代这些年来计算阅读的书籍数量......但我不知道这是否可能在SQL中。
答案 0 :(得分: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
子句将允许您定位表中包含的数字的特定子集。