TIME和INT作为数据类型的多个列的SUM和AVERAGE

时间:2017-06-02 18:29:01

标签: sql sql-server

下面是我的查询和结果,我还在下面添加了我想要实现的内容。

UPH代表“每小时单位数”'

SELECT  
  TimeLog.ID
 ,TimeLog.DeptCode AS 'DC'
 ,TimeLog.OpCode AS 'OC'
 ,TimeLog.StartTime AS 'Start'
 ,TimeLog.FinishTime AS 'Finish'
 ,ElapsedTime = convert(time(0),dateadd(second,datediff(second,StartTime,FinishTime),0)) 
 ,TimeLog.Units
 ,UPH = cast(isnull(Units / nullif(datediff(minute,StartTime,FinishTime)*1.0,0),0.0)*60  as decimal(10,0))
FROM dbo.TimeLog INNER JOIN dbo.AssociateInfo WITH (NOLOCK)
ON AssociateInfo.ID = TimeLog.ID
WHERE TimeLog.DeptCode = 'FB' AND TimeLog.OpCode = 'PU' AND TimeLog.Units IS NOT NULL

ID      DC  OC  Start       Finish      ElapsedTime Units   UPH
2375935 FB  PU  10:36:00    14:20:00    03:44:00    263     70
11259   FB  PU  03:15:00    04:00:00    00:45:00    100     133
11259   FB  PU  04:00:00    05:00:00    01:00:00    150     150
11259   FB  PU  05:15:00    06:00:00    00:45:00    50      67
11259   FB  PU  06:00:00    07:00:00    01:00:00    88      88
11259   FB  PU  07:40:00    08:00:00    00:20:00    77      231
11259   FB  PU  08:00:00    09:00:00    01:00:00    88      88

我希望看到结果显示ElapsedTime,Units和UPH的总和,其中ID,DC和OC列具有相同的值。

ID       DC    OC    ElapsedTime    Units    UPH
2375935  FB    PU    03:44:00       263      70
11259    FB    PU    04:50:00       816      169          

3 个答案:

答案 0 :(得分:1)

//vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv

 imgSelected1.image = UIImage(imgSelected)// give me a Error <

 //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^      
    //the imgSelected is a UIImagePickerController
    //the imgSelected1 is a UIImageView

 // how can i get the data from the imgSelected and pass it to the 
 imgSelected1?? 
  //***************************************
      }
 }
}

使用您的查询输出的rextester演示:http://rextester.com/IZZX78524

返回:

SELECT  
    TimeLog.ID
  , TimeLog.DeptCode AS 'DC'
  , TimeLog.OpCode AS 'OC'
  --, TimeLog.StartTime AS 'Start'
  --, TimeLog.FinishTime AS 'Finish'
  --, ElapsedTime = convert(time(0),dateadd(second,sum(datediff(second,StartTime,FinishTime)),0)) 
  /* for greater than 24 hours: */
 , ElapsedTime = right('0' + convert(varchar(9),(sum(datediff(second,Start,Finish)) / 3600 )),2) + ':' 
               + right('0' + convert(varchar(2),(sum(datediff(second,Start,Finish)) / 60) % 60 ),2) + ':' 
               + right('0' + convert(varchar(2),(sum(datediff(second,Start,Finish)) % 60 )),2)
  , Units = sum(TimeLog.Units)
  , UPH = cast(isnull(sum(Units) / nullif(sum(datediff(minute,StartTime,FinishTime))*1.0,0),0.0)*60  as decimal(10,0))
FROM dbo.TimeLog 
  INNER JOIN dbo.AssociateInfo WITH (NOLOCK)
    ON AssociateInfo.ID = TimeLog.ID
WHERE TimeLog.DeptCode = 'FB'
  and TimeLog.OpCode   = 'PU'
  and TimeLog.Units IS NOT NULL
group by 
    TimeLog.ID
  , TimeLog.DeptCode
  , TimeLog.OpCode 

答案 1 :(得分:0)

您可以使用GROUP BY

SELECT tl.ID, tl.DeptCode AS DC, tl.OpCode AS OC,
       ElapsedTime = convert(time(0), dateadd(second, sum(datediff(second, StartTime, FinishTime)), 0)) ,
       SUM(tl.Units) as units,
       UPH = cast(coalesce(Units / nullif(sum(datediff(minute, StartTime, FinishTime))*1.0, 0), 0.0) * 60  as decimal(10, 0) )
FROM dbo.TimeLog tl INNER JOIN
     dbo.AssociateInfo ai
     ON ai.ID = tl.ID
WHERE tl.DeptCode = 'FB' AND tl.OpCode = 'PU' AND tl.Units IS NOT NULL
GROUP BY tl.ID, tl.DeptCode, tl.OpCode;

答案 2 :(得分:0)

您可以尝试以下

   SELECT  
      TimeLog.ID
     ,MAX(TimeLog.DeptCode) AS 'DC'
     ,MAX(TimeLog.OpCode) AS 'OC' 
     ,SUM( convert(time(0),dateadd(second,sum(datediff(second,StartTime,FinishTime)),0))) AS 'ElapsedTime' 
     ,SUM(TimeLog.Units) AS 'Units'
     ,(cast(isnull(sum(TimeLog.Units) / nullif(sum(datediff(minute,TimeLog.StartTime,TimeLog.FinishTime))*1.0,0),0.0)*60  as decimal(10,0)))AS 'UPH'
    FROM dbo.TimeLog 
    WHERE TimeLog.DeptCode = 'FB' AND TimeLog.OpCode = 'PU' AND TimeLog.Units IS NOT NULL
    GROUP BY TimeLog.ID