With our customer orders data as sparse as it is, a monthly report for purchases by customer would look as follows. adding the missing months. We can see from the data that we are missing most months of the year for our two customers. Remember that our requirement is to show a report for every month in 2004 for every customer. First we will build a "time dimension" set (using subquery factoring) and outer join it to our orders table. We can see that this hasnt quite worked. We have the zero sums and the year-months, but we are missing customer names. This is because we outer joined to CUSTOMER_ORDERS on the year-months, so any customer columns would show as NULL for deficient rows. Until PARTITION OUTER JOIN appeared in Oracle 10g, we couldnt "invent" data easily , though the next section shows that it is possible in prior versions. data-densification without partition outer join.