Вы должны перекрестно объединить все возможные даты со всеми возможными продуктами, а затем выбрать существующие количества закупок, если таковые имеются для каждой комбинации.
Предполагая определения таблиц:
create table Master (id int, description char(10));
insert into Master (id, description)
values (1, 'Apple'), (2, 'Banana'), (3, 'Grape'), (4, 'Orange');
create table Detail (id int, masterId int, buyDate date, bought int);
insert into Detail (id, masterId, buyDate, bought)
values (1, 3, '01/Jan/2012', 2),
(2, 1, '05/Jan/2012', 4),
(3, 3, '05/Jan/2012', 8),
(4, 4, '09/Jan/2012', 10);
Использование:
select BuyDates.BuyDate, M.description,
coalesce((select bought from Detail D
where D.buyDate = BuyDates.buyDate and M.id = D.masterId), 0)
from (select distinct buyDate from Detail) BuyDates
cross join Master M;