Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如果您是对的,视图vwCHHoursByAreaByWeek可能包含重复的行。我让OP来确定视图上是否有唯一的索引,或者其他一些保证不会有重复行的方法。鉴于视图的名称后固定为“ByWeek”,我有一种感觉,OP将发现没有重复的行,并将使用更有效的GROUP_Sql_Sql Server_Views - Fatal编程技术网

Sql 如果您是对的,视图vwCHHoursByAreaByWeek可能包含重复的行。我让OP来确定视图上是否有唯一的索引,或者其他一些保证不会有重复行的方法。鉴于视图的名称后固定为“ByWeek”,我有一种感觉,OP将发现没有重复的行,并将使用更有效的GROUP

Sql 如果您是对的,视图vwCHHoursByAreaByWeek可能包含重复的行。我让OP来确定视图上是否有唯一的索引,或者其他一些保证不会有重复行的方法。鉴于视图的名称后固定为“ByWeek”,我有一种感觉,OP将发现没有重复的行,并将使用更有效的GROUP,sql,sql-server,views,Sql,Sql Server,Views,如果您是对的,视图vwCHHoursByAreaByWeek可能包含重复的行。我让OP来确定视图上是否有唯一的索引,或者其他一些保证不会有重复行的方法。鉴于视图的名称后固定为“ByWeek”,我有一种感觉,OP将发现没有重复的行,并将使用更有效的GROUP BY子句。名为vwchhoursbyreabyweek的视图可能不仅仅是“ByWeek”;它也是“按区域”。如果区域被添加,会发生什么?远离的?细分?对于维护人员来说,这是一个巨大的地雷。嗨,有了可用的信息@Mike,我认为这两个答案都很好。


如果您是对的,视图vwCHHoursByAreaByWeek可能包含重复的行。我让OP来确定视图上是否有唯一的索引,或者其他一些保证不会有重复行的方法。鉴于视图的名称后固定为“ByWeek”,我有一种感觉,OP将发现没有重复的行,并将使用更有效的
GROUP BY
子句。名为vwchhoursbyreabyweek的视图可能不仅仅是“ByWeek”;它也是“按区域”。如果区域被添加,会发生什么?远离的?细分?对于维护人员来说,这是一个巨大的地雷。嗨,有了可用的信息@Mike,我认为这两个答案都很好。我以前没有使用过这两种方法,但需要类似的方法,结果运行效率低下的sql。我知道这是错误的,但不知道解决问题的方法。如果在这种情况下,视图下面的表上有一个PK。然而,简写的OP是什么意思呢?@IanW,OP只是“原创海报”的意思。这是一个互联网俚语,指的是开始一个线程/对话的人。Hi@Anon以前从未见过交叉应用,所以必须用谷歌搜索它。为什么@Mike的方法比其他方法更有优势?嗨@Anon:我刚刚在我们的服务器上运行了这两种方法,您的方法的子树成本为61259.1,Mike的方法的子树成本为2887.23。在我所做的一点培训中(子树成本)是向我解释检查效率的方式,尽管我可以理解其中会包含可维护性。不用说,这两种方法都是对我的方法的巨大改进!!:)速度方面,连接将更快。它假设没有两行具有重叠的开始和结束范围,从而将总数相加。如果他们这样做,那么数据将被重复计数,总数将不正确。交叉应用拒绝了这一假设,并安全地计算了总和。这里有三种保护自己的好方法:1)使用交叉应用(如果足够快的话)2)每周在vwchHoursbyArea上做一个PK(在下面的表上有一个PK是没有意义的)3)使用SCHEMABINDING(一般来说是好的做法,但是如果你没有设置它,那会让你感到很痛苦)Hi@Anon以前从未见过交叉应用,所以必须用谷歌搜索它。为什么@Mike的方法比其他方法更有优势?嗨@Anon:我刚刚在我们的服务器上运行了这两种方法,您的方法的子树成本为61259.1,Mike的方法的子树成本为2887.23。在我所做的一点培训中(子树成本)是向我解释检查效率的方式,尽管我可以理解其中会包含可维护性。不用说,这两种方法都是对我的方法的巨大改进!!:)速度方面,连接将更快。它假设没有两行具有重叠的开始和结束范围,从而将总数相加。如果他们这样做,那么数据将被重复计数,总数将不正确。交叉应用拒绝了这一假设,并安全地计算了总和。这里有三种保护自己的好方法:1)使用交叉应用(如果速度足够快)2)每周在vwchHoursbyArea上进行PK(在下面的表上有一个PK是没有意义的)3)使用SCHEMABINDING(一般来说是好的做法,但如果你没有为此做好准备,这会让你很痛苦)
WageYear    StartDate   EndDate    Week No
2013/14    16/11/2013   22/11/2013  34
2013/14    09/11/2013   15/11/2013  33
2013/14    02/11/2013   08/11/2013  32
2013/14    26/10/2013   01/11/2013  31
StockCode   TrnYear TrnMonth    EntryDate   IntoDespKg
Part A      2013    1           06/04/2012  634.5
Part A      2013    1           23/04/2012  634.5
Part B      2013    2           03/05/2012  660
Part B      2013    2           03/05/2012  660
WageYear    StartDate   EndDate Week No IntoDespKg  TCastKg
2013/14     16/11/2013  22/11/2013   34 141170.925  173840.482
2013/14     09/11/2013  15/11/2013   33 149969.934  134483.17
2013/14     02/11/2013  08/11/2013   32 137661.513  165725.115
2013/14     26/10/2013  01/11/2013   31 137586.634  179026.199
SELECT [WageYear]
  ,[StartDate]
  ,[EndDate]
  ,[Week No]

  ------------------Std Information------------------
  ,(Select sum ([IntoDespKg]) from [dbo].[CHCIW_RecoveryLabDirectMins] 
        where ([EntryDate] >=W.[StartDate] and [EntryDate] <=W.[EndDate])) As IntoDespKg
  ,(Select sum ([CastKg]) from [dbo].[CHCIW_RecoveryLabDirectMins] 
        where ([EntryDate] >=W.[StartDate] and [EntryDate] <=W.[EndDate])) As [TCastKg]
 ,(Select sum (CoreDirectMins)/60 from [dbo].[CHCIW_RecoveryLabDirectMins] 
        where ([EntryDate] >=W.[StartDate] and [EntryDate] <=W.[EndDate])) As [CoreDirectHrs]       
FROM [Wages].[vwCHHoursByAreaByWeek] W
ORDER BY EndDate DESC
SELECT [WageYear]
  ,[StartDate]
  ,[EndDate]
  ,[Week No]

  ------------------Std Information------------------
  ,IntoDespKg
  ,[TCastKg]
  ,[CoreDirectHrs]       
FROM [Wages].[vwCHHoursByAreaByWeek] W
CROSS APPLY (
  SELECT 
    sum ([IntoDespKg]) IntoDespKg,
    sum ([CastKg]) [TCastKg],
    sum (CoreDirectMins)/60 [CoreDirectHrs]
  from [dbo].[CHCIW_RecoveryLabDirectMins] 
  where ([EntryDate] >=W.[StartDate] and [EntryDate] <=W.[EndDate])
) H
SELECT HoursByAreaByWeek.WageYear
    ,HoursByAreaByWeek.StartDate
    ,HoursByAreaByWeek.EndDate
    ,HoursByAreaByWeek.[Week No]
    ,Sum(RecoveryLabDirectMins.IntoDespKg) As IntoDespKg
    ,Sum(RecoveryLabDirectMins.CastKg) As TCastKg
    ,Sum(CoreDirectMins / 60) As CoreDirectHrs      
FROM Wages.vwCHHoursByAreaByWeek As HoursByAreaByWeek
    JOIN dbo.CHCIW_RecoveryLabDirectMins As RecoveryLabDirectMins
    ON RecoveryLabDirectMins.EntryDate Between HoursByAreaByWeek.StartDate AND HoursByAreaByWeek.EndDate
GROUP BY HoursByAreaByWeek.WageYear
    ,HoursByAreaByWeek.StartDate
    ,HoursByAreaByWeek.EndDate
    ,HoursByAreaByWeek.[Week No]
ORDER BY EndDate DESC