2014-12-02 3 views
0

Я пытаюсь получить сумму сумм на основе столбца (sysprocode), который является уникальным для составного ключа (Organizationunitid и payrollcodeid). До сих пор мне удалось получить сумму на основе Organizationunitid и payrollcodeid но не рядом sysprocode.A смотреть на мой SQLfiddle следует уточнить это более Click Здесь я попробовал этот запрос SQLSQL complex join query с суммой

SELECT TB1.OUId,TB1.OUName,(TB2.Amount - TB3.ManualDeduction) AS amt 
FROM 
( 
SELECT ou.OrganizationUnitID AS OUId,ou.OrganizationUnitName AS OUName 
FROM OrganizationUnits ou 
) TB1, 
(SELECT e.OrganizationUnitID AS OUId,SUM(trn.Amount) AS Amount 
FROM Employees e 
LEFT JOIN tblPeriodTransactions trn ON (e.EmployeeID=trn.Employee_ID) 
where trn.Period_Month =6 and trn.Period_Year=2013 and trn.PayrollCode_ID=2 
GROUP BY e.OrganizationUnitID 
)TB2, 
(SELECT e.OrganizationUnitID AS OUId,SUM(ep.ManualDeduction) AS ManualDeduction 
FROM Employees e 
LEFT JOIN tblEmployeePension ep ON (e.EmployeeID=ep.Employee_ID) 
GROUP BY e.OrganizationUnitID 
)TB3 
WHERE (TB2.OUId=TB1.OUId) 
AND (TB3.OUId=TB1.OUId) 

Вот пример вывода в Imgur sample output

+0

Какой вывод вы хотите, добавьте выходные данные вывода в свой вопрос –

+0

done @SaharshShah – GotaloveCode

ответ

0

Я решил это, наконец, после того, как копошится о

SELECT TB4.Syscode, 
CASE TB4.accountType WHEN 'c' THEN concat('-', (TB2.Amount - TB3.ManualDeduction)) 
ELSE (TB2.Amount - TB3.ManualDeduction) end AS amount 
FROM 
( 
SELECT ou.OrganizationUnitID AS OUId,ou.OrganizationUnitName AS OUName 
FROM OrganizationUnits ou 
) TB1, 
(SELECT e.OrganizationUnitID AS OUId,SUM(trn.Amount) AS Amount 
FROM Employees e 
LEFT JOIN tblPeriodTransactions trn ON (e.EmployeeID=trn.Employee_ID) 
WHERE trn.Period_Month = 6 
AND trn.Period_Year = 2013 
AND trn.PayrollCode_ID = 2 
GROUP BY e.OrganizationUnitID 
)TB2, 

(SELECT e.OrganizationUnitID AS OUId,SUM(ep.ManualDeduction) AS ManualDeduction 
FROM Employees e 
LEFT JOIN tblEmployeePension ep ON (e.EmployeeID=ep.Employee_ID) 
GROUP BY e.OrganizationUnitID 
)TB3, 
(SELECT ou.OrganizationUnitID AS OUId,sp.sysprocode as Syscode,sp.accountType AS accountType 
FROM OrganizationUnits ou  
INNER JOIN sysprocodes sp ON (ou.OrganizationUnitID=sp.organisationunitid) 
INNER JOIN tblpayrollcode pc ON (pc.PayrollCode_ID = sp.PayrollCode_ID) 
where sp.PayrollCode_ID = 2 
GROUP BY ou.OrganizationUnitID,sp.sysprocode,sp.PayrollCode_ID,sp.accountType 
)TB4 
WHERE (TB2.OUId=TB1.OUId) 
AND (TB3.OUId=TB1.OUId) 
AND(TB4.OUId =tb3.OUId) 

Нажмите HERE для просмотра SQLFIDDLE

0

Проверьте следующий запрос WHe þér он работает или нет, но я думаю, расчета пенсии является проблемой, потому что нет PayrollCode_ID в tblEmployeePension:

SELECT 
    OU.OrganizationUnitID, 
    OU.OrganizationUnitName, 
    SPC.sysprocode, 
    PC.PayrollCode_ID, 
    SUM(PD.Amount), 
    (SELECT SUM(tblEmployeePension.ManualDeduction) FROM tblEmployeePension WHERE Employee_ID IN (SELECT Employee_ID FROM Employees WHERE OrganizationUnitID = OU.OrganizationUnitID)) AS Pension, 
    SUM(PD.Amount) - (SELECT SUM(tblEmployeePension.ManualDeduction) FROM tblEmployeePension WHERE Employee_ID IN (SELECT Employee_ID FROM Employees WHERE OrganizationUnitID = OU.OrganizationUnitID)) as amt 
FROM 
    tblPeriodTransactions PD 
INNER JOIN 
    Employees E 
ON 
    PD.Employee_ID = E.EmployeeID 
INNER JOIN 
    OrganizationUnits OU 
ON 
    E.OrganizationUnitID = OU.OrganizationUnitID 
INNER JOIN 
    tblPayrollCode PC 
ON 
    PD.PayrollCode_ID = PC.PayrollCode_ID 
INNER JOIN 
    sysprocodes SPC 
ON 
    SPC.organisationunitid = OU.OrganizationUnitID AND 
    SPC.PayrollCode_ID = PC.PayrollCode_ID 
GROUP BY 
    OU.OrganizationUnitID, 
    PC.PayrollCode_ID, 
    SPC.sysprocode, 
    OU.OrganizationUnitName 
+0

ping me on http://chat.stackoverflow.com/rooms/438 99/asp-net gotawove пожалуйста @sandeep coz это ваш soln http://imgur.com/1kqKAbp, но это те значения, которые мне нужны http://imgur.com/Wm3IxrN – GotaloveCode