2013-11-25 56 views
0

我一直在努力的查询标识与我的数据库中数据的问题更新在一个视图中的行:从复杂的select语句

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

现在,我发现我希望通过更新来纠正他们的问题。我希望先前创建的重复活动将值从小时移动到doubleBookedHours,并将小时移动到零。其次,我想更近的行的DoubleBookedFLag列被更新为1

我怎样才能做到这一点?

回答

0

你可以写一个SQL Server代理作业调用T-SQL或SSIS包来执行你的逻辑。

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

例如,

  1. 查找重复的条目并将它们保存到暂存表或临时表中,可以在暂存区或tempdb中。一些可通过多个进程访问的位置(spid)。

  2. 查找最近最少记录(1+)。将小时移动到双重预订列?

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

  4. 更新的最新记录有双书旗列设置为1

你不是特定的移动从几小时到一倍预订时间的价值。这些列是?

总之,一个SQL Server代理作业和几个正确的T-SQL的步骤应该解决您的问题。