您可以交叉连接产品和日期,然后带上带有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
这会将nulls 用于没有销售的行 - 这可能是一个数字列,因此您通常不希望将'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