我有一个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
答案 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)
我不太清楚表格的具体细节来进行查询,但最适合您的选择是:
OR
让我知道更多细节,我愿意帮助您制作查询。