I have two tables called SalaryPayment and SalaryStaff.
SalaryStaff Table
+-----------------+------------+-------------+
| SalaryStaffId | EmployeeId | TotalWage |
+-----------------+------------+-------------+
| 6 | 5 | 80 |
| 7 | 5 | 100 |
| 9 | 5 | 60 |
+-----------------+------------+-------------+
SalaryPayment table
+-----------------+------------+-------------+
| SalaryPaymentId | EmployeeId | PaidAmount |
+-----------------+------------+-------------+
| 1 | 5 | 550 |
+-----------------+------------+-------------+
I need a result like follows,
+-----------------+-----------------+-----------------+-----------------+
| EmployeeId | TotalPaidAmount | TotalWageAmount | PendingAmount |
+-----------------+-----------------+-----------------+-----------------+
| 5 | 550 | 240 | 210 |
+-----------------+-----------------+-----------------+-----------------+
TotalPaidAmount means SUM(SalaryPayment.PaidAmount )
TotalWageAmount means SUM(SalaryStaff.TotalWage )
PendingAmount means SUM(SalaryStaff.TotalWage ) - SUM(SalaryPayment .PaidAmount )
I've tried the following, it gets TotalPaidAmount gets triples the actual value as 1650 and TotalWageAmount gets proper value.
$this->SalaryStaff->find('all',array(
'fields'=>array('SalaryPayment.*','SalaryStaff.*','SUM(SalaryStaff.TotalWage) as TotalWageAmount','SUM(SalaryPayment.PaidAmount) as TotalPaidAmount'),
'joins'=>array(
array(
'alias'=>'SalaryPayment',
'table'=>'salary_payments',
'conditions' =>array('SalaryPayment.EmployeeId = SalaryStaff.EmployeeId')
)
),
'conditions' =>array('SalaryStaff.EmployeeId'=>$EmployeeId),
'group' => 'SalaryStaff.EmployeeId'
));