2016-04-07 6 views
1

Недавно я обнаружил старую базу данных Microsoft Access, которую я сделал для записи списка книг и отметки, которые я прочитал и в каком году.Поиск диапазона Year в SQL (Microsoft Access)

В настоящий момент это включает таблицу BOOKS, в которой есть столбец «Чтение» и «Год». Запрос, который генерирует таблицу результатов получает столбец года и рассчитывает, сколько книг было прочитано в каждом году, например:

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

Однако, это означает, что если книги не помечены как прочитанные, например, 2015, то 2015 просто полностью исключен из диаграммы. В идеале это будет отображаться со значением 0.

Есть ли способ сделать это? Я не против вникать в сам SQL. До сих пор мои первоначальные мысли разрабатывали количество лет с 2010 года по текущий год (с использованием DateDiff) и как-то повторяли эти годы, чтобы подсчитать количество прочитанных книг ... но я не знаю, возможно ли это в SQL.

+1

Вы не можете группировать значение, которое отсутствует в таблице, поэтому 1845 не входит в ваш результирующий набор ... Я предлагаю вам вручную управлять годами, которые вы хотите в БД; желательно иметь таблицу Years со всеми годами, которые вы хотите в результирующем наборе, и LEFT JOIN it к книгам по годам. – 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 января следующего года этот год будет автоматически добавлен в таблицу с подсчетом 0. Но это хорошее решение, если это невозможно! спасибо – Vanita

Смежные вопросы