it will be hard to tease out but this is likely your problem.
Crystal does not enforce a data set from a table join just by doing the join (like in SQL) unless you set the enforcement in the link to do this.
So say you have a table of all colors (table A where 5 exist) and a table of used colors (table B where only 3 have been used).
if you inner join the tables you would think you only will get 3 results.
but if in you report you do not enforce the link and you use the colors field from table A you will get 5 records. As soon as ou add any field from table B to the report it will enforce the join and change your result to 3.
It further complicates as you have add tables but the idea remains that when you use a field from any two tables it will enforce all the joins that are need to get to that data.
to help you know when your data is dropping and by how much you can add a COUNT of a field from your main table (your primary table like all customers), place it in the report header, se the number and then one by one add a field from each table and watch to see when the number changes and you will know which join is causing the data rows to change.
Using outer joins may correct that problem but you won't know until you know where the issue is.
Edited by DBlank - 18 Aug 2011 at 4:42am