Tsc*_*ott 5 t-sql sql-server stored-procedures case
我在尝试创建存储过程时遇到了一些问题。我将 Microsoft SQL Server Management Studio 2017 与 T-SQL 结合使用。我有 2 张桌子,eTasks并且eStaff. 以下是每个表的列:
电子员工
StaffID | Name
电子任务
TaskID | StaffID | Title | CreateDate
目前,根据数据显示,所有任务都分配给 StaffID“1”。eTasks 和 eStaff 表都会使用新任务和 Staff 进行更新,或者会被删除,这些表每天都不会具有完全相同的行。有时,eTask 表中会有 1000 行,接下来可能只有 400 行。有时 eStaff 表中会有 3 名工作人员,接下来可能有 12 名。
我想要做的是,当我运行存储过程时,在当前 StaffID 之间均匀分配任务。
到目前为止,这就是我所拥有的:
CREATE PROCEDURE UpdatingeTasksTable 
AS 
    DECLARE t_rowCount INTEGER
    DECLARE s_staffIDCount INTEGER
    SET t_rowCount = SELECT COUNT(*) FROM eTasks
    SET s_staffIDCount = SELECT DISTINCT StaffID FROM eStaff
    UPDATE eTasks
    SET StaffID = CASE WHEN TaskID % t_rowCount = 1 
                          THEN 1
                       WHEN TaskID % t_rowCount = 2 
                          THEN 4
                       WHEN TaskID % t_rowCount = 3 
                          THEN 3
                       WHEN TaskID % t_rowCount = 4 
                          THEN 2
                  END 
    FROM eTasks b
    WHERE TaskID = b.TaskID;
我知道,我目前的查询情况如何,它只会将任务分配给 4 个人。有没有办法使CASE语句动态化,这样就不只是一组静态数字?
正如 Ankur 上面提到的那样,这将是使用循环向员工分配任务的一种方法,但可能不是您正在寻找的答案。希望能帮助到你。
    IF OBJECT_ID('tempdb..#Result') IS NOT NULL
    DROP TABLE #Result
    CREATE Table #Result
        (
        Employee int,
        task int
        )
    -- number of staff
    DECLARE @Staff INT = 12 -- could use (SELECT COUNT(*) FROM (SELECT DISTINCT StaffID FROM eStaff) a) to get actual count
    -- number of tasks
    DECLARE @Task INT = 49 -- could use (SELECT COUNT(*) FROM (SELECT DISTINCT TaskID FROM eTasks) a) to get actual count
    DECLARE @Staffholder INT = 1 -- staff place holder for loop
    DECLARE @Loop INT = 1
    WHILE @Loop <= @Task
        BEGIN
        INSERT INTO #Result (Employee, task)
        SELECT @Staffholder, @Loop
        SET @Loop = @Loop + 1
        SET @Staffholder = CASE WHEN @Staffholder = @Staff THEN 1 ELSE @Staffholder + 1 END
        END
        SELECT * FROM #Result
        ORDER BY Employee
| 归档时间: | 
 | 
| 查看次数: | 182 次 | 
| 最近记录: |