这是我的存储过程,它似乎正在从表中提取所有正确的值,但由于某种原因,它使所有小时数加倍,从而使所有值加倍。我不知道我在哪里出问题了,任何帮助将不胜感激。
SELECT
FirstName, LastName,
JobRegular.RegularHours AS RegularHours,
JobRegular.RegularHours * dbo.Employees.Wage AS RegularPay,
JobRegular.OvertimeHours AS OvertimeHours,
JobRegular.OvertimeHours * dbo.Employees.Wage AS OvertimePay,
JobOvertime.CBRegularHours AS CBRegularHours,
JobOvertime.CBRegularHours * dbo.Employees.Wage AS CBRegularPay,
JobOvertime.CBOvertimeHours AS CBOvertimeHours,
JobOvertime.CBOvertimeHours * dbo.Employees.Wage AS CBOvertimePay
FROM
dbo.Employees
INNER JOIN
(SELECT
dbo.EmployeeJobs.EmployeeId,
SUM(dbo.EmployeeJobs.RegularHours) AS RegularHours,
SUM(dbo.EmployeeJobs.RegularHours) * MIN(dbo.Employees.Wage) AS RegularPay,
SUM(dbo.EmployeeJobs.OvertimeHours) As OvertimeHours,
SUM(dbo.EmployeeJobs.OvertimeHours) * MIN(dbo.Employees.Wage) As OvertimePay
FROM
dbo.EmployeeJobs, dbo.Employees
WHERE
dbo.EmployeeJobs.ComputerCodeId IN (7,8,9,13,14,15,16,17,18,19,22)
GROUP BY
dbo.EmployeeJobs.EmployeeId) AS JobRegular ON dbo.Employees.EmployeeId = JobRegular.EmployeeId
LEFT JOIN
(SELECT
dbo.EmployeeJobs.EmployeeId,
SUM(dbo.EmployeeJobs.RegularHours) As CBRegularHours,
SUM(dbo.EmployeeJobs.RegularHours) * MIN(dbo.Employees.Wage) AS CBRegularPay,
SUM(dbo.EmployeeJobs.OvertimeHours) AS CBOvertimeHours,
SUM(dbo.EmployeeJobs.OvertimeHours) * MIN(dbo.Employees.Wage) As CBOvertimePay
FROM
dbo.EmployeeJobs, dbo.Employees
WHERE
dbo.EmployeeJobs.ComputerCodeId IN (4,5,6)
GROUP BY
dbo.EmployeeJobs.EmployeeId) AS JobOvertime ON dbo.Employees.EmployeeId = JobOvertime.EmployeeId
答案 0 :(得分:2)
您的子查询(JobRegular,JobOvertime)没有联接条件-您说的是将EmployeeJobs加入到Employees,但是没有说如何。因此,它进行交叉连接-每个员工记录都与每个工作记录都相连接。我很惊讶它只是增加了一倍。您需要更多类似的东西-这是JobRegular,JobOvertime也需要修复。 (此外,开始使用表别名,这将使它更具可读性)
SELECT dbo.EmployeeJobs.EmployeeId,
SUM(dbo.EmployeeJobs.RegularHours) AS RegularHours,
SUM(dbo.EmployeeJobs.RegularHours) * MIN(dbo.Employees.Wage) AS RegularPay,
Sum(dbo.EmployeeJobs.OvertimeHours) As OvertimeHours,
SUM(dbo.EmployeeJobs.OvertimeHours) * MIN(dbo.Employees.Wage) As OvertimePay
FROM dbo.EmployeeJobs
inner join dbo.Employees on dbo.Employees.EmployeeId = dbo.EmployeeJobs.EmployeeId
WHERE dbo.EmployeeJobs.ComputerCodeId IN (7,8,9,13,14,15,16,17,18,19,22)
GROUP BY dbo.EmployeeJobs.EmployeeId
已编辑-实际上,您完全不需要子查询中的员工,将其删除
SELECT dbo.EmployeeJobs.EmployeeId,
SUM(dbo.EmployeeJobs.RegularHours) AS RegularHours,
SUM(dbo.EmployeeJobs.RegularHours) * MIN(dbo.Employees.Wage) AS RegularPay,
Sum(dbo.EmployeeJobs.OvertimeHours) As OvertimeHours,
SUM(dbo.EmployeeJobs.OvertimeHours) * MIN(dbo.Employees.Wage) As OvertimePay
FROM dbo.EmployeeJobs
WHERE dbo.EmployeeJobs.ComputerCodeId IN (7,8,9,13,14,15,16,17,18,19,22)
GROUP BY dbo.EmployeeJobs.EmployeeId