[英]SQL complex join query with sum
我正在嘗試根據組合鍵(Organizationunitid和payrollcodeid)唯一的列(sysprocode)獲取金額總和。到目前為止,我已經設法根據Organisationunitid和payrollcodeid來獲取金額,但沒有與sysprocode一起使用。 SQLfiddle應該進一步闡明這一點單擊此處,我已經嘗試過此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)
檢查以下查詢是否正常工作,但我認為計算養老金是有問題的,因為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
我摸索了一下終於解決了
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)
單擊此處查看SQLFIDDLE
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.