【问题标题】:how to sum time column and avoid null fields in ssrs 2008如何对时间列求和并避免 ssrs 2008 中的空字段
【发布时间】:2015-02-22 15:37:29
【问题描述】:

我有一列时间值,我想对这些值求和,但是当一个字段为空时,会显示错误 #error,我使用了 iif (isnothing(attTime),0,attTime)条件但是这个整数错误然后我使用了 00:00 但它出现了 12 小时和总和 12

我使用的这段代码

= Right("0" & Sum(CInt(Left(CDate(Fields!timeAtt.Value.ToString()).ToString("hh:mm"),2)), "DataSet1") + Floor(Sum(CInt(Right(CDate(Fields!timeAtt.Value.ToString()).ToString("hh:mm"),2)), "DataSet1") / 60),2) & ":" & Sum(CInt(Right(CDate(Fields!timeAtt.Value.ToString()).ToString("hh:mm"),2)), "DataSet1") Mod 60

所以请我想对字段求和并避免空字段

【问题讨论】:

  • 你能控制你的数据库查询吗?如果是,那么发布您的查询?而且还不清楚您要通过复杂的表达来做什么。你能用例子解释一下吗?可能有您想要实现的简单解决方案。
  • “从出席表中选择 hoursAtt”所以我想要总小时数,但空字段阻止我
  • 您不能将您的查询更改为select hoursAtt from attendanceTable where hoursAtt is not NULL 吗?
  • No.. 我想显示空白字段

标签: sql-server reporting-services ssrs-2008


【解决方案1】:

使用

iif (isnothing(attTime),"00:00", CDate(Fields!timeAtt.Value.ToString()).ToString("hh:mm"))

在你的表达中

【讨论】:

  • "00:00" 不是时间所以它会出错,而且当转换它变成 12 所以总增加 12
  • 您不必再次将其转换为日期。在我的表达式中,它将仅用作字符串。直接在 Left 函数中使用。
  • 我做了帽子但得到错误...这是查询“” =Right("0" & Sum(CInt(Left(CDate(iif (isnothing(Fields!timeAtt.Value.ToString( )),"00:00", CDate(Fields!timeAtt.Value.ToString()).ToString("hh:mm"))),2)), "DataSet1") + Floor(Sum(CInt(Right( CDate(iif (isnothing(Fields!timeAtt.Value.ToString()),"00:00", CDate(Fields!timeAtt.Value.ToString()).ToString("hh:mm"))),2)) , "DataSet1") / 60),2) & ":" & Sum(CInt(Right(CDate(iif (isnothing(Fields!timeAtt.Value.ToString())),"00:00", CDate(Fields!timeAtt .Value.ToString()).ToString("hh:mm"))),2)), "DataSet1") Mod 60
  • 移除外部 CDate 例如Right("0" & Sum(CInt(Left(CDate(iif (isnothing(Fields!timeAtt.Value.ToString()),"00:00", CDate(Fields!timeAtt.Value.ToString()).ToString("hh:mm"))),2))Right("0" & Sum(CInt(Left(iif (isnothing(Fields!timeAtt.Value.ToString(),"00:00", CDate(Fields!timeAtt.Value.ToString()).ToString("hh:mm"))),2))
  • = Right("0" & Sum(CInt(Left(iif (isnothing(Fields!timeAtt.Value.ToString())),"00:00", CDate(Fields!timeAtt.Value. ToString()).ToString("hh:mm")),2)), "DataSet1") + Floor(Sum(CInt(Right(CDate(iif (isnothing(Fields!timeAtt.Value.ToString())), 00:00", CDate(Fields!timeAtt.Value.ToString()).ToString("hh:mm"))),2)), "DataSet1") / 60),2) & ":" & Sum( CInt(Right(CDate(iif (isnothing(Fields!timeAtt.Value.ToString()),"00:00", CDate(Fields!timeAtt.Value.ToString()).ToString("hh:mm"))) ,2)), "DataSet1") Mod 60
【解决方案2】:

![TimeAtt 列][1]

<table>
<tr>
  <td>
    
  </td> 
  <td>
    TimeAtt
  </td> </tr>
  <tr> <td>
    
  </td> <td>
    10:50
  </td> </tr>
 <tr> <td>
    
  </td>  <td>
   11:00
  </td> </tr>
  <tr><td>
    
  </td><td>
    12:12
  </td> </tr>
 <tr> <td>
    
  </td>  <td>
    Null
  </td> </tr>
  <tr><td>total</td><td>#Error</td>
  </tr>
</table>

这是查询 = Right("0" & Sum(CInt(Left(iif (isnothing(Fields!timeAtt.Value.ToString()),"00:00", CDate(Fields!timeAtt.Value.ToString())).ToString(" hh:mm")),2)), "DataSet1") + Floor(Sum(CInt(Right(CDate(iif (isnothing(Fields!timeAtt.Value.ToString())),"00:00", CDate(Fields!timeAtt.Value.ToString()).ToString("hh: mm"))),2)), "DataSet1") / 60),2) & ":" & Sum(CInt(Right(CDate(iif (isnothing(Fields!timeAtt.Value.ToString())),"00:00", CDate(Fields!timeAtt.Value.ToString()).ToString(" hh:mm"))),2)), "DataSet1") Mod 60

【讨论】:

  • 请在 cmets 中发布此内容,而不是作为答案。
  • isnothing(Fields!timeAtt.Value.ToString()) => 从此处删除 ToString() 以及其他发生的情况。
【解决方案3】:

如果您处理底层查询,这似乎会更简单。 这行得通吗?

SELECT ISNULL(hoursAtt,'00:00:00') AS hoursAtt FROM attendanceTable

【讨论】:

    猜你喜欢
    • 2023-04-02
    • 2018-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多