如何在SSRS中汇总时间数据类型列?

时间:2019-11-21 07:37:23

标签: sql-server reporting-services reporting

我有一个在SSRS中看起来像这样的表:

CheckIn     CheckOut      Hours
9:00:00     10:00:00     1:00:00
9:30:00     10:00:00     0:30:00
9:15:00     10:00:00     0:45:00

所以我只想对小时数列进行汇总,以使它看起来像这样

CheckIn     CheckOut      Hours
9:00:00     10:00:00     1:00:00
9:30:00     10:00:00     0:30:00
9:15:00     10:00:00     0:45:00

                       Total Hours
                         2:15:00

我尝试使用此表达式,但没有用

Str(sum(CInt(split(Fields!Hours.Value,":")(0)))
+sum(CInt(split(Fields!Hours.Value,":")(1)))\60)
&":"& CStr(sum(CInt(split(Fields!Hours.Value,":")(1)))
mod 60+sum(CInt(split(Fields!Hours.Value,":")(2)))\60) 
&":"& CStr(sum(CInt(split(Fields!Hours.Value,":")(2))) mod 60)

2 个答案:

答案 0 :(得分:0)

  

首先是获取总sum()

     

第二步是提取日期并将其乘以24小时,然后将其相加   到小时值。

CInt(split(TimeSpan.FromTicks(Sum(Fields!Hours.Value)), ".")(0)) * 24
    + CInt(split(split(TimeSpan.FromTicks(Sum(Fields!Hours.Value)), ".")(1), ":")(0)) 
& ":" & split(split(TimeSpan.FromTicks(Sum(Fields!Hours.Value)), ".")(1), ":")(1)
& ":" & split(split(TimeSpan.FromTicks(Sum(Fields!Hours.Value)), ".")(2), ":")(1)

答案 1 :(得分:0)

在报告的“代码”部分添加2个功能:

' I took it here https://www.tek-tips.com/viewthread.cfm?qid=1165634
Public Function TimeStrToSeconds(ByVal strTime As String) As Integer
        Dim strHours As String
        Dim strMinutes As String
        Dim strSeconds As String

        Dim arrTime() As String

        arrTime = strTime.Split(":")

        strHours = arrTime(0)
        strMinutes = arrTime(1)
        strSeconds = arrTime(2)

        TimeStrToSeconds= strHours * 60 * 60
        TimeStrToSeconds+= strMinutes * 60
        TimeStrToSeconds+= strSeconds


End Function

' I took it here http://www.freevbcode.com/ShowCode.asp?ID=638
Public Function Duration(TotalSeconds As Long, UpFormat As _
    Integer) As String

  ' Format = 0, 1, 2
  ' This determines the format of the time to be returned
  ' Type 0: 1d 4h 15m 47s
  ' Type 1: 1 day, 4:15:47
  ' Type 2: 1 day 4hrs 15mins 47secs
  ' Type else: Defaults to type 0

  Dim Seconds
  Dim Minutes
  Dim Hours
  Dim Days
  Dim DayString As String
  Dim HourString As String
  Dim MinuteString As String
  Dim SecondString As String

  Seconds = Int(TotalSeconds Mod 60)
  Minutes = Int(TotalSeconds \ 60 Mod 60)
  Hours = Int(TotalSeconds \ 3600 Mod 24)
  Days = Int(TotalSeconds \ 3600 \ 24)

  Select Case UpFormat
    Case 0
      DayString = "d "
      HourString = "h "
      MinuteString = "m "
      SecondString = "s"
    Case 1
      If Days = 1 Then DayString = " day, " _
      Else: DayString = " days, "
      HourString = ":"
      MinuteString = ":"
      SecondString = ""
    Case 2
      If Days = 1 Then DayString = " day " _
      Else: DayString = " days, "
      If Hours = 1 Then HourString = "hr " _
      Else: HourString = "hrs "
      If Minutes = 1 Then MinuteString = "min " _
      Else: MinuteString = "mins "
      If Seconds = 1 Then SecondString = "sec " _
      Else: SecondString = "secs"
    Case Else
      DayString = "d "
      HourString = "h "
      MinuteString = "m "
      SecondString = "s"
  End Select

  Select Case Days
    Case 0
      Duration = Format(Hours, "0") & HourString & _
            Format(Minutes, "00") & MinuteString & _
             Format(Seconds, "00") & SecondString
    Case Else
      Duration = Days & DayString & _
          Format(Hours, "0") & HourString & Format _
          (Minutes, "00") & MinuteString & _
           Format(Seconds, "00") & SecondString
    End Select

End Function

您的总数:

=Code.Duration(Sum(Code.TimeStrToSeconds(Fields!Hours.Value)),1)