Используйте left outer join
, где левая сторона - это таблица всех месяцев, а правая - таблица значений, связанных с каждым месяцем.Вот пример:
Создайте таблицу месяцев (1 представляет январь - если это проще, вы также можете придерживаться названий месяцев):
create table month (month int);
insert into month values
(1), (2), (3), (4), (5), (6), (7), (8), (9), (10), (11), (12);
Таблица суммируемых значений, связанных с каждым месяцем:
create table month_val (month int, val int);
insert into month_val values
(1, 10), (1, 11), (2, 20), (2, 21), (3, 30);
Присоединиться к таблицам слева:
select month.month, coalesce(sum(month_val.val), 0)
from month
left join month_val on (month.month = month_val.month)
group by month.month
Результат:
month coalesce(sum(month_val.val), 0)
1 21
2 41
3 30
4 0
5 0
6 0
7 0
8 0
9 0
10 0
11 0
12 0
Конечно, вы можете использовать названия месяцев вместо номеров месяцев или конвертировать месяцномер в имя с помощью функции, специфичной для вашей базы данных.