2011-12-21 113 views
1

嗨我正在爲考勤管理系統創建一個RDLC報表。在我的報告中,我想總和WorkedHours計算時間總和

正是我想要這個輸出

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

,所以我想在RDLC報告末尾顯示所有總有3名員工。

喜歡Total:22時二十五分41秒

+1

請提供有關您的數據庫架構及其中包含的數據的更多信息。 – 2011-12-21 11:37:43

+0

請顯示您當前的sql。 – Zohaib 2011-12-21 11:38:36

+1

以表格的形式顯示! – 2011-12-21 11:43:45

回答

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 
+0

我想在小時:小時:秒,然後總和所有小時:分鐘:秒的差異。 – forum 2011-12-21 11:52:29

+0

其工作..謝謝很多... @ Sparky – forum 2011-12-21 12:52:50

+0

我如何總結RDLC報告中的差異? – forum 2011-12-21 13:00:25

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. 秒轉換爲datetime
  5. 使用datediff來計算小時數
  6. 使用datepart分鐘和秒
  7. 生成結果字符串並使用right(100+T...)在值之前添加0如果有必要。

cross apply ...部分沒有必要。我補充說爲了使代碼更清晰。如果您願意,可以直接在字段列表中使用cross apply中的表達式。

+0

我該如何做RDLC報告中totalworkedhour的總和? totalworkedhour類型是varchar..totalworkedhour就像是04:13:00 .. – forum 2011-12-23 09:19:28