Самый простой способ - объединить все месяцы и годы для каждого домена:
select my.year, my.month, d.domain, coalesce(t.total_orders, 0) as total_orders
from (select distinct month, year from input) my cross join
(select distinct domain from input) d left join
t
on t.month = my.month and t.year = my.year and t.domain = d.domain;
Примечание. Предполагается, что каждая комбинация года / месяца встречается хотя бы один раз, где-то в данных.
Получение значений в пределах диапазона - это боль, потому что вы разбили дату на несколько столбцов. Позвольте мне предположить, что годы все такие же, как в вашем примере:
select my.year, my.month, d.domain, coalesce(t.total_orders, 0) as total_orders
from (select distinct month, year from input) my join
(select domain, min(month) as min_month, max(month) as max_month
from input
) d
on my.month >= d.min_month and my.month <= d.max_month left join
t
on t.month = my.month and t.year = my.year and t.domain = d.domain