表中的SQL Update行具有2个可能的值

问题描述

我正在尝试更新表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 (将#修改为@)