You have multiple similar representations of the same real-world entities. Those representations are similar, but not identical. Until they are identical, they can not be used to generate unambiguously correct reports. Yes, you can get close, but you can not verify the correctness.
Once the people who matter -- ie: the ones who pay the bills -- are willing to accept that the data must be cleaned up first, then any one of several options for doing the reporting becomes clear. This exact project has been done over and over, and the people who don't have to make it work always think there is some magic wand you can wave over shit data that makes it all fit together. There isn't. You can't.
Now, once you've got the green light to fix the data, you need a way to keep multiple DB platforms in sync. If the only two are Oracle and SQL Server, you can use update triggers on all tables that need to be syncronized. These triggers will have to call routines -- probably written in C/C++ -- to do the synchronization.
I'm not going to suggest picking one authoritative customer table and deleting the other two. That would involve re-writing everything that uses it. That's a whole other project. Unless that is open for discussion.