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

时间:2013-11-25 17:34:28

标签: sql sql-server

我一直致力于查询数据库中数据的问题:

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

这样做是为同一天在同一任务中找到同一个人预订的重复小时数:

enter image description here

现在我发现了我想用UPDATE纠正它们的问题。我希望先前创建的重复活动将值从Hours移动到doubleBookedHours,将Month移动到零。其次,我希望将更新的行的DoubleBookedFLag列更新为1。

我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:0)

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

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

例如。

  1. 查找重复的条目并将它们保存到临时表中,无论是在临时区域还是临时区域中。某些位置可由多个进程(spid)访问。

  2. 查找最近的记录(1+)。移动时间加倍预订列?

  3. 查找最近的记录(1+)。零小时栏。

  4. 更新最近的记录,将双书标记列设置为1。

  5. 您没有具体说明将价值从小时数转移到预订时间的两倍。这些是吗?

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