Поскольку все поля, которые вы используете для создания солнечного генератора, взяты из таблиц с возможностью создания нескольких записей, они все, конечно, добавляют их.
Есть несколько проблем с тем, что вы делаете, но сначала, если бы я был вами, я бы вычел сумму и посмотрел, что это за расчет, прежде чем подвести итог. В действительности я бы сделал что-то вроде:
SELECT r.ret_desc, vmp.vlt_id,
(vmp.cash_in + vmp.per_cash_in_sec)
+ (CASE WHEN vmp.acc_id = t.db_id AND t.txn_type_id = 1 THEN t.amount ELSE 0 END)
- (CASE WHEN vmp.acc_id = t.cr_id AND t.txn_type_id = 1 THEN t.amount ELSE 0 END),
vmp.cash_in,vmp.per_cash_in_sec, vmp.per_cash_in_sec, t.db_id,t.cr_id, t.txn_type_id ,t.amount
FROM ret AS r
LEFT OUTER JOIN vmp ON r.acc_id = vmp.acc_id
LEFT OUTER JOIN txn AS t ON (r.acc_id = t.credit_acc_id OR r.acc_id = t.debit_acc_id)
WHERE t.txn_type_id IN (1,2,4,5)
GROUP BY r.ret_desc, vmp.vlt_id
Во-вторых, почему вы делаете левые соединения? Определенно, txn не является левым соединением, поскольку вы использовали его в предложении wher, которое эффективно преобразует его во внутреннее соединение, поэтому, если вам нужно, чтобы оно было левым соединением, вам нужно вместо этого переместить это условие where в предложение on.