If you can avoid sub reports IMO I recommend that you do. Sometimes you can't so don't agonize over it. Outer joins can become inner joins based on select criteria.
Joins are not automatically enforced in crystal. THey become enforced once you use a field from both tables involved in the join or if you use the enforcing options in the link set up.
Sometimes simply adding in an OR NULL(field) can correct the problem (along with the outer join)....
e.g. {table.Date} in {?startdate} to {?enddate} and ({table.department}={?department param} or isnull(table.department})
Often though you have to write a query outside of crystal using somehting like a view or stored procedure which becomes your source or in crystal using COMMAND to select all the data from one table and then join that to the other table.
Does this help?
Edited by DBlank - 09 Sep 2009 at 2:54pm