I would think that you would use a cross tab style report.
I haven't used them in crystal, but in ssrs, and probably in crystal, you want an entry for each column displayed, irrespective of if that entry actually has a value...so a entry with a null value is fine.
if you are joining straight to the tables, off-hand, I have no idea how to enforce this rule. In a stored proc, you can just add the rows that are needed to make the report look correct.
HTH