If you post your queries, then we can kibbitz.
My guess is that you are trying to bind your calls, emails and meetings all together, and getting a cross join instead of unique numbers.
If you have an email file with 2 records for a particular sale, a call file with 3 records for that sale, and a meeting file with 1 record for that sale, then a cross join would give you 6 records, and summing up the calls, emails and meetings could give you 18 or 36 or whatever, depending on how you coded it. If there happened to be no emails for a particular sale, you might get 0 as your result for that sale.
If you use a left join against your sales table for each other table, then you can add up the number of calls (or emails, or meetings), and get zero if that's the correct answer. Those queries would look a little like this:
Code:
QueryCalls -
SELECT
E1S.SalesID AS CallSalesID,
SUM(NZ(E1C.Duration,0)) AS CallTotTime,
SUM(IIF(IsNull(E1C.SalesID),0,1)) AS CallCount
FROM
E1_Sales AS E1S LEFT JOIN E1_Calls AS E1C ON E1S.SalesID = E1C.Salesid
GROUP BY E1S.SalesID;
QueryEmails -
SELECT
E1S.SalesID,
SUM(NZ(E1E.Duration,0)) AS EmailTotTime,
SUM(IIF(IsNull(E1E.SalesID),0,1)) AS EmailCount
FROM
E1_Sales AS E1S LEFT JOIN E1_Emails AS E1E ON E1S.SalesID = E1E.Salesid
GROUP BY E1S.SalesID;
QueryMeets -
SELECT
E1S.SalesID AS MeetSalesID,
SUM(NZ(E1M.Duration,0)) AS MeetTotTime,
SUM(IIF(IsNull(E1M.SalesID),0,1)) AS MeetCount
FROM
E1_Sales AS E1S LEFT JOIN E1_Meetings AS E1M ON E1S.SalesID = E1M.Salesid
GROUP BY E1S.SalesID;
Since you have a single record coming out of each of those queries for each salesID, regardless of the number of touches of ecah type, you can now join each of those single records together and you know there will be precisely one match for every unique SalesID.
Code:
QueryAll -
SELECT
E1S.SalesID,
QC.CallTotTime,
QC.CallCount,
QE.EmailTotTime
QE.EmailCount,
QM.MeetTotTime,
QM.MeetCount,
QC.CallTotTime + QE.EmailTotTime + QM.MeetTotTime AS TouchTime,
QC.CallCount + QE.EmailCount + QM.MeetCount AS TouchCount
FROM
(E1_Sales AS E1S INNER JOIN QueryCalls AS QC ON E1S.SalesID = QC.SalesID)
INNER JOIN
(QueryEmails AS QE INNER JOIN QueryMeets AS QM ON QE.SalesID = QM.SalesID)
ON E1S.SalesID = QM.Salesid;