If I correctly understand the purpose you need only summary by the values of Table1, then you can filter distinct results by simply joining all the subqueries in outer "where" clause and adding the "rowid" marker of the row from corresponding table (this is possible in Oracle), and thus calculating the result in the outer query:
select T.adddate, sum(T.Charges) from
(
SELECT distinct Table1.rowid, Table1.Charges, table4.adddate FROM
Table1,
table3,
table2,
table4
WHERE
Table1.evidencenumber = table2.evidencenumber
AND table3.rep_id = table4.rep_id
and table4.adddate>=TO_DATE('010109','ddmmyy')
AND table4.adddate<=TO_DATE('311209','ddmmyy')
AND table4.dept='Engineering'
AND table3.evidencenumber=table2.evidencenumber
AND table2.pareantid IS NULL
) T
group by T.adddate
Still if your SQL engine doesnt have the built-in row marker (like rowid in Oracle) you can add a unique field to the Table1 and use it as a rowid-marker.