cross join
を使用して行を生成し、次にleft join
を使用してデータを取り込むことができます。
テーブルにすべての日付とすべての商品が含まれていることを前提としています(必ずしもすべての組み合わせである必要はありません)。基本的な考え方は次のとおりです。
select d.date, p.product, coalesce(t.numsold, 0)
from (select distinct date from t) d cross join
(select distinct product from t) p left join
t
on t.date = d.date and t.product = p.product;
ああ、私はあなたのデータは、サプライヤIDを持っていることに気づいたので、与えられた日付の特定の製品のための複数の行は、おそらくあります。したがって、いくつかの集約が必要です。ここでは一つの方法である:
select d.date, p.product, coalesce(sum(t.numsold), 0)
from (select distinct date from t) d cross join
(select distinct product from t) p left join
t
on t.date = d.date and t.product = p.product
group by d.date, p.product;