Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.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 计算次数之和_Sql_Sql Server 2005_Reporting Services_Rdlc - Fatal编程技术网

Sql 计算次数之和

Sql 计算次数之和,sql,sql-server-2005,reporting-services,rdlc,Sql,Sql Server 2005,Reporting Services,Rdlc,您好,我正在为考勤管理系统创建RDLC报告。在我的报告中,我想计算总的工作时数 我想要的正是这个输出 EmployeeId EmployeeName WorkedHours 1 ABC 04:00:25 2 XYZ 07:23:01 3 PQR 11:02:15 因此,我想在RDLC报告末尾显示所有3名员工的总数 比如Total:22:25:41试试这个 select EmpId

您好,我正在为考勤管理系统创建RDLC报告。在我的报告中,我想计算总的
工作时数

我想要的正是这个输出

EmployeeId EmployeeName  WorkedHours
1             ABC        04:00:25
2             XYZ        07:23:01
3             PQR        11:02:15
因此,我想在RDLC报告末尾显示所有3名员工的总数

比如Total:22:25:41

试试这个

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
  • 将工时转换为日期时间
  • 计算1900-01-01T00:00:00之后的秒数
  • 所有行的秒数总和
  • 将秒转换为日期时间
  • 使用
    datediff
    计算小时数
  • 使用
    datepart
    获取分和秒
  • 构建结果字符串,必要时使用
    right(100+T..)
    在值之前添加
    0

  • 交叉应用…
    部分不是必需的。我添加了它以使代码更清晰。如果愿意,您可以直接在字段列表中使用
    交叉应用
    中的表达式。

    请提供有关您的数据库架构和其中包含的数据的更多信息。请显示您当前的sql。如果总数大于24小时,该怎么办。当然,在SQL方面,只有一个
    datetime
    数据类型,它可以处理一天中的时间,不是时间跨度的持续时间。无论总计>24。我只需要该列的总计。WorkedHours字段类型为VARCHAR。您将问题更改为计算时间之和,现在回答两次之间的差异,这是您之前的问题,没有意义。为什么你不能问一个新问题呢?我想要以小时为单位的差异:分钟:秒,然后是所有小时的总和:分钟:秒。如何在RDLC报告中求差异之和?选择LTRIM(STR(sum(mi,EmployeeTempAttendanceDetail.TotalEmployeeTempWorkedHrs)/60)+':'+LTRIM(STR(sum(mi,EmployeeTempAttendanceDetail.TotalEmployeeTempWorkedHrs)%60))+':'+LTRIM(STR(sum)(sum(sum)(sum,TotalEmployeeTempAttendancedHrs))(ss,EmployeeTempAttendanceDetail.TotalEmpWorkedHrs)-(总和(ss,EmployeeTempAttendanceDetail.TotalEmpWorkedHrs)/60)*60)如有不同,我想计算此EmployeeTempAttendanceDetail.TotalEmpWorkedHrs的总和如何实现?不确定您的意思,报告末尾的一行包含此总和?我会在报告中添加一列,其中包含以总秒为单位的差值,然后计算此行的总和,并使用上面的格式将这些秒的总和转换为hh:mm:dd格式如何计算RDLC报告中的totalworkedhour之和..?totalworkedhour类型为varchar..totalworkedhour类似于04:13:00。。
    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