计算时间总和

时间:2011-12-21 11:33:38

标签: sql sql-server-2005 reporting-services rdlc

您好我正在为考勤管理系统创建RDLC报告。在我的报告中,我想要总计WorkedHours

我想要这个输出

EmployeeId EmployeeName  WorkedHours
1             ABC        04:00:25
2             XYZ        07:23:01
3             PQR        11:02:15

所以我想在RDLC报告结尾处显示所有3名员工的总数。

像总计:22:25:41

2 个答案:

答案 0 :(得分:0)

试试这个

select EmpId,In_duration,out_duration,
    datediff(mi,in_duration,out_duration) as Diff_mins
from table

DateDiff中的第一个参数是mi(分钟)。如果你在文档中查找dateDiff,你会看到其他选项。以下示例显示了作为字符串的小时,分​​钟和秒的差异。

select   
 LTRIM(STR(DATEDIFF(mi,in_duration,out_duration) /60))+':'+
 LTRIM(STR(DATEDIFF(mi,in_duration,out_duration) %60))+':'+
 LTRIM(STR(DATEDIFF(ss,in_duration,out_duration) -   
          (DATEDIFF(ss,in_duration,out_duration)/60)*60))
as diff

答案 1 :(得分:0)

declare @T table
(
  EmployeeId int,
  EmployeeName varchar(10),
  WorkedHours varchar(8)
)

insert into @T
select 1, 'ABC', '04:00:02' union all
select 2, 'XYZ', '07:23:01' union all
select 3, 'PQR', '11:02:15'

select right(100+T2.hh, 2)+':'+right(100+T2.mm, 2)+':'+right(100+T2.ss, 2) as TotalHours
from (
      select dateadd(second, sum(datediff(second, 0, cast(WorkedHours as datetime))), 0) as WorkedSum
      from @T 
     ) as T1
cross apply (select datediff(hour, 0, T1.WorkedSum) as hh, 
                    datepart(minute, T1.WorkedSum) as mm, 
                    datepart(second, T1.WorkedSum) as ss) as T2
  1. 将WorkedHours转换为datetime
  2. 计算自1900-01-01T00:00:00
  3. 以来的秒数
  4. 汇总所有行的秒数
  5. 将秒转换为日期时间
  6. 使用datediff计算小时数
  7. 使用datepart获取分钟和秒数
  8. 构建生成的字符串,如果需要,请使用right(100+T...)在值之前添加0
  9. cross apply ...部分不是必需的。我补充说,以使代码更清晰。如果您愿意,可以直接在字段列表中使用cross apply中的表达式。