0

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

例如:

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

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

用简单的英语来说,在周末我需要计算第二班的运行时间,将其除以二,然后将其添加到第一班和第三班的时间。此外,周末的第 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
4

2 回答 2

0

如果我理解正确,您不一定要创建副本,而是使用它来执行您需要的操作。要在不对源数据执行数据操作的情况下完成整个操作,您可以将集合合并在一起。工会允许您将第 2 个班次分成两半,同时将它们分配给第 4 班和第 5 班。group by 会将“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
于 2014-08-08T17:38:21.450 回答
0

我不太了解表的细节以进行查询,但对您来说最好的选择是:

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

或者

  • 根据条目的星期几使用案例语句处理信息。这类似于肖恩推荐的答案。

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

于 2014-08-08T18:08:10.537 回答