Вы можете перекрестно соединить товары и даты, а затем принести таблицу с left join
:
select
p.product,
t.quantity_sold,
d.yr,
d.mn
from (select distinct product from mytable) p
cross join (select distinct yr, mn from mytable) d
left join mytable t
on t.product = p.product
and t.yr = d.yr
and t.mn = d.mn
. Это ставит null
s для строк без продажи - предположительно, число c столбец, поэтому вы обычно не хотите записывать в него строку типа 'Not Sold'
.
Если существует возможность дублирования (product, yr, mn)
, вы можете использовать внешнее агрегирование:
select
p.product,
sum(t.quantity_sold) quantity_sold,
d.yr,
d.mn
from (select distinct product from mytable) p
cross join (select distinct yr, mn from mytable) d
left join mytable t
on t.product = p.product
and t.yr = d.yr
and t.mn = d.mn
group by p.product, d.yr, d.mn