2014-12-02 91 views
0

我想基于一个列(sysprocode),这是复合关键字(Organizationunitid和payrollcodeid)唯一的获得金额的总和。到目前为止我已经设法得到基于Organizationunitid和payrollcodeid的金额但不是靠sysprocode.A看我SQLfiddle应该澄清这更Click 在这里,我想这SQL查询SQL复杂连接查询总和

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

你想要什么输出,在你的问题中增加样本输出数据 – 2014-12-02 06:50:23

+0

done @SaharshShah – GotaloveCode 2014-12-02 07:00:43

回答

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疗法是工作或没有,但我觉得计算退休金的问题,因为在tblEmployeePension没有PayrollCode_ID:

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 gotalove请@sandeep coz这是你的soln http://imgur.com/1kqKAbp但这是我需要的值http://imgur.com/Wm3IxrN – GotaloveCode 2014-12-02 09:21:26