В первом запросе используются переменные, объединенные с ЛЮБОЙ таблицей и ограничивающиеся 12 месяцами, чтобы он автоматически генерировал каждый месяц / год, который вы хотите ... например: начиная с 2010-01-01 и продолжая в течение 12 месяцев.Второй запрос практически идентичен исходному, предварительно сгруппировавшись по месяцам с фактическими данными.Затем, присоединяясь к ним слева, каждый первый месяц захватывает то, что он может найти в окончательных агрегатах данных, но сохраняет результаты на основе даты, а не в алфавитном порядке.
select
date_format(justDates.FirstOfMonth,'%M %Y') ShowDate,
ifnull(PreSummary.kg, 0) as kg,
ifnull(PreSummary.ka, 0) as ka,
ifnull(PreSummary.lr, 0) as lr,
ifnull(PreSummary.lh, 0) as lh,
ifnull(PreSummary.lb, 0) as lb,
ifnull(PreSummary.ll, 0) as ll,
ifnull(PreSummary.nc, 0) as nc,
ifnull(PreSummary.na, 0) as na,
ifnull(PreSummary.sbs, 0) as sbs,
ifnull(PreSummary.stbs, 0) as stbs,
ifnull(PreSummary.total, 0) as Total
from
( SELECT @dt:= date_add( @dt, interval 1 month ) FirstOfMonth
FROM (select @dt := '2010-01-01' ) vars,
opr.t_temuan
LIMIT 12 ) JustDates
left join
( Select
date_format(a.tanggal,'%M %Y') ShowDate,
sum(a.kg) as kg,
sum(a.ka) as ka,
sum(a.lr) as lr,
sum(a.lh) as lh,
sum(a.lb) as lb,
sum(a.ll) as ll,
sum(a.nc) as nc,
sum(a.na) as na,
sum(a.sbs) as sbs,
sum(a.stbs) as stbs,
sum(a.kg+a.ka+a.lr+a.lh+a.sbs+a.lb+a.ll+a.nc+a.na+a.stbs) as total
from
opr.t_temuan as a
where
a.id_site=197
and a.tanggal between '2010-02-01' and '2011-01-31'
and a.type in ( 'f', 'i')
group by
1 ) PreSummary
on JustDates.ShowDate = PreSummary.ShowDate
order by
JustDates.FirstOfMonth