Sql 从复杂的select语句更新视图中的行

Sql 从复杂的select语句更新视图中的行,sql,sql-server,Sql,Sql Server,我一直在处理一个查询,该查询识别数据库中数据的问题: SELECT t1.* FROM [DailyTaskHours] t1 INNER JOIN ( SELECT ActivityDate ,taskId ,EnteredBy FROM [DailyTaskHours] WHERE hours != 0 GROUP BY EnteredBy ,taskId ,ActivityDate HA

我一直在处理一个查询,该查询识别数据库中数据的问题:

SELECT t1.*
FROM [DailyTaskHours] t1
INNER JOIN (
    SELECT ActivityDate
        ,taskId
        ,EnteredBy
    FROM [DailyTaskHours]
    WHERE hours != 0
    GROUP BY EnteredBy
        ,taskId
        ,ActivityDate
    HAVING COUNT(*) > 1
    ) t2 ON (
        t1.ActivityDate = t2.ActivityDate
        AND t1.taskId = t2.taskId
        AND t1.EnteredBy = t2.EnteredBy
        AND t1.Hours != 0
        )
ORDER BY ActivityDate
这样做的目的是查找在同一天为同一人在同一任务上预订的重复小时数:

现在我发现了这些问题,我想通过更新来纠正它们。我希望比另一个更早创建的重复活动将值从小时移动到doubleBookedHours,并将小时数清零。其次,我希望最近一行的DoubleBookedFLag列更新为1


如何实现这一点?

您可以编写SQL Server代理作业来调用T-SQL或SSIS包来执行逻辑

在设计算法时,我总是喜欢使用伪代码

比如说

  • 查找重复条目并将其保存到临时表中,可以是暂存区域或tempdb中。可由多个进程(SPID)访问的某些位置

  • 查找最近最少的记录(1+)。把时间移到双倍预订栏

  • 查找最近最少的记录(1+)。零小时列

  • 更新最新记录,使“双簿标志”列设置为1

  • 您没有具体说明将值从小时移动到双倍预订小时。这些是专栏吗

    简而言之,一个SQL Server代理作业和几个正确的T-SQL步骤应该可以解决您的问题