似乎无法找到一个格式足够接近,以得到一个坚实的答案。试图混淆选择案例陈述,但事实证明这是一种痛苦。我有一个基本的工资数据库,我正在设置(如下图所示),我的想法是如果员工的员工类别(EmpCat)为1,我想执行以下语句,但是如果是2,基本上每小时与薪水)。还是相当新的摆弄T SQL,所以任何援助将不胜感激。如何创建一个条件存储过程
编辑:我调整了程序。它看起来应该做我现在想要的,甚至应该自动总结支付期间的总工作时间,但是我现在收到一个错误,指出它没有包含在聚合函数或GROUP BY子句中。无法弄清楚这是一个问题。
CREATE PROCEDURE NewTimesheet(
@LName varchar(50),
@FName varchar(50),
@ShiftType char(2),
@StartDate date,
@EndDate date,
@OTHours decimal(18,2),
@HolidayHours decimal(18,2)
)
AS
BEGIN
INSERT INTO tblTimesheet(
EmpID,
ShiftType,
StartDate,
EndDate,
TotalHours,
OTHours,
HolidayHours,
NetPay
)
SELECT e.EmpID, @ShiftType, @StartDate, @EndDate, SUM(HoursWorked) ,
@OTHours, @HolidayHours,
CASE WHEN ed.EmpCat = 1
THEN (SUM(HoursWorked) * PayRate)
ELSE (e.PayRate/24)
END
FROM tblEmployee e INNER JOIN tblEmployeeDetail ed ON e.EmpID = ed.EmpID
inner join tblShifts on e.EmpID = tblShifts.EmpID
WHERE [email protected] AND [email protected] AND Date > @StartDate AND Date <
@EndDate
GROUP BY e.EmpID, ed.EmpCat, e.PayRate, tblShifts.HoursWorked
END
你为什么限制名称?做一个批处理并且一个人去做每个人会不会更好? –
做出两个单独的select语句并分别执行插入, select * from tblemployee a join tblemployeedetail b on a.empid = b.empid where b.empcat = 1 select * from tblemployee a join tblemployeedetail b on a.empid = b.empid where b.empcat = 2 –