SQL Server:我需要在周末以不同于工作日的方式操作数据

时间:2014-08-08 16:11:00

标签: sql-server sql-update weekend

我有一个SQL Server表,它具有按日期和班次组织的不同设备的生产运行时间。

例如:

Date, Shift, Running Hours  
7/11/14, 1, 4.2

我的问题是,在工作日,有3个8小时轮班,但在周末有2个12小时轮班。无论一周中的哪一天,所有数据都基于3个班次进行存储。

用简单的英语,在周末我需要进行第二班的运行时间,将其除以2并将其添加到第一和第三班次。此外,周末的第1班和第3班需要重新标记为第4班和第5班,因为它们与工作日班次的持续时间不同。

我无法触摸原始表中的数据,我基本上需要在另一个表(或视图?)中拥有数据的实时副本并在那里进行操作。我开始创建一个关于母表的视图,然后尝试做一个更新语句。我开始只是更新班次号码,但我似乎无法让它离开地面。

使用视图甚至是正确的方法吗?更新视图会更改原始表中的值吗?或者我应该有另一个由存储过程填充的表,其中包含所有操作吗?

感谢您提供的任何帮助。我为任何格式问题道歉。这是我的第一篇文章。

SELECT TOP (100) PERCENT 
    ShiftNumber, TowerString, 
    convert(varchar,a.ShiftDateTime,101) AS Day, Running, 
FROM 
    DBName.dbo.ShiftDetails

UPDATE 
    v_ViewName
SET 
    ShiftNumber = 4
WHERE     
    DATENAME(dw, Day) = 'Saturday' AND ShiftNumber = 1

2 个答案:

答案 0 :(得分:0)

如果我理解正确,您不一定要创建副本,而是使用它来执行您需要的操作。要在不执行源数据的数据操作的情况下执行整个操作,您可以将联合集合在一起。联盟允许你将第二班分成两半,同时将它们分配给4和5班。分组将汇总" 2"第4和第5条记录一起给你你的总数。

   ;WITH ShiftDetail AS (    
    Select ShiftDateTime    
    , Case when DateName(dw,ShiftDateTime) = 'Saturday' and shiftnumber = 1 then 4 when DateName(dw,ShiftDateTime) = 'Saturday' and shiftnumber = 3 then 5 else ShiftNumber end    
    ,Running    
    ,TowerString    
    FROM dbo.ShiftDetails    
    WHERE DateName(dw,ShiftDateTime) <> 'Saturday' OR  ShiftNumber IN (1,3)    
    UNION ALL    
    SELECT ShiftDateTime, 4 as ShiftNumber, Running/2.0 as Running, TowerString    
    FROM dbo.ShiftDetails    
    where DateName(dw,ShiftDateTime) = 'Saturday' and ShiftNumber =2    
    UNION ALL    
    SELECT ShiftDateTime, 5 as ShiftNumber, Running/2.0 as Running, TowerString    
    FROM dbo.ShiftDetails    
    where DateName(dw,ShiftDateTime) = 'Saturday' and ShiftNumber =2
)    
    SELECT ShiftDateTime, ShiftNumber, TowerString, Sum(Running) as Running    
    FROM ShiftDetail    
    GROUP BY ShiftDateTime, ShiftNumber,TowerString

答案 1 :(得分:0)

我不太清楚表格的具体细节来进行查询,但最适合您的选择是:

  • 使用公用表表达式代替视图来获取数据集,然后对该数据的报表执行必要的查询。有关示例,请参阅[Microsoft的Technet](使用公用表表达式代替视图以获取数据集然后执行)。这将是我眼中的首选方法,因为它将业务逻辑与数据分开(略)。

OR

  • 根据条目的星期几,使用案例陈述来处理信息。这与肖恩推荐的答案类似。

让我知道更多细节,我愿意帮助您制作查询。