问题描述
我正在尝试更新表Timesheets
中的列。此列保存来自另一个表(EmployeeProfileID
)的数据ID。
EmployeeProfile
表包含员工的详细信息,例如工作时间,部门,团队等。
Timesheet
表中包含工作人员每周时间表的信息。
如果某个人的EmployeeProfile
上的信息发生了变化(即该人更改了团队),那么他们将获得一个新的个人资料。
如果他们在2周内每周工作时间不同,则他们也可以同时拥有2个实时个人资料。也就是说,他们每周工作20个小时,下一周工作35个小时
工作是提前几周计划的,每次计划工作一个新星期都会创建一个新的时间表,这意味着一个人可以在接下来的4-6周内在系统上拥有时间表。
假设一个人变更团队和他们的EmployeeProfileID
变更,我需要弄清楚如何更改未来的时间表。不能删除它们。
这是我到目前为止所拥有的,但这仅占具有1个人资料的人的身影。
CREATE PROCEDURE [dbo].[UpdateTimesheetProfileID]
@EmployeePID INTEGER,@WeekID INTEGER
AS
DECLARE @WeekMonday int = (SELECT [Monday] FROM [dbo].[Weeks] WHERE [WeekID] = @WeekID)
DECLARE @EmployeeProfile int = (SELECT TOP 1 [EmployeeProfileID]
FROM [dbo].[EmployeeProfiles] EP
WHERE Ep.[EmployeePID] = @EmployeePID
ORDER BY [EmployeeProfileID] DESC)
DECLARE @Week int = (SELECT [ReportWeek] FROM [dbo].[Weeks] WHERE [WeekID] = @WeekID)
IF EXISTS (SELECT [TimesheetID]
FROM [dbo].[Timesheets] Ts
JOIN [dbo].[Weeks] W ON W.[WeekID] = Ts.[WeekID]
WHERE [EmployeePID] = @EmployeePID
AND Ts.[EmployeeProfileID] <> @EmployeeProfile
AND W.[Monday] > @WeekMonday)
BEGIN
UPDATE [dbo].[Timesheets]
SET [EmployeeProfileID] = @EmployeeProfile
FROM [dbo].[Timesheets] Ts
JOIN [dbo].[Weeks] W ON W.[WeekID] = Ts.[WeekID]
WHERE [EmployeePID] = @EmployeePID AND W.[Monday] > @WeekMonday
END
GO
我该如何调整它以便检查一个人是否有个人资料?
有一个Weeks
表,其中包含一列名为ReportWeek
的列,其中包含从1到52的星期数。
我尝试使用以下情况设置EmployeeProfileID
CASE
WHEN (@week - 2 * ROUND(@week / 2,0)) = 1
THEN @EmpProfileID1
ELSE @EmpProfileID2
END
任何帮助将不胜感激。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)