【发布时间】:2020-01-30 14:32:40
【问题描述】:
我有以下选择语句:
SELECT [TR_DATE]
,[TR_TIME]
,RIGHT('000000' + CONVERT(varchar,TR_TIME), 6)
,TIMEFROMPARTS(SUBSTRING(RIGHT('000000' + CONVERT(varchar,TR_TIME), 6),1,2), SUBSTRING(RIGHT('000000' + CONVERT(varchar,TR_TIME), 6),3,2), SUBSTRING(RIGHT('000000' + CONVERT(varchar,TR_TIME), 6),5,2),0,0) as trtime
,[ET_TYPENO]
,[ET_NAME]
FROM [DB400].[dbo].[TRANSACTIONREPORT]
where DEPT_NAME = 'GIJIMA AST HOLDINGS (PTY) LTD'
/*and LOC_NAME = 'Front Door and Gate'*/
and TR_DATE between '20200120' and '20200130'
order by TR_DATE, MST_LASTNAME, MST_FIRSTNAME, TR_TIME
返回以下数据:
我想用它来计算在建筑物中花费的时间。
请注意,ET_TYPENO = 1 等同于“允许正常输入”,ET_TYPENO = 2 等同于“允许正常输出”
我在 ssrs 报告中有以下表达式
=iif(Fields!ET_TYPENO.Value=2,
DateDiff(DateInterval.Hour, previous(Fields!trtime.Value),Fields!trtime.Value),
"")
但它解析为以下#Error。
更新
预期结果
计算“Allowed Normal In”事件和“Allowed Normal Out”事件之间的时间差。
以第 2 行和第 3 行为例。 “Allowed Normal In”发生在 07:23:19,“Allowed Normal Out”发生在 08:55:48。我需要它来返回这两次之间的时间差。 IE。 1:32:29。
【问题讨论】:
-
你能添加你想要的结果吗,这将有助于了解你到底需要什么
-
两件事:根据您的示例数据,您永远不会得到返回的间隔,因为您的
ET_TYPENO列是 1 或 2,而不是表达式正在检查的“OUT”。尝试将最后的 "" 更改为Nothing,因为这样可以防止出现数据类型问题。 -
感谢@AlanSchofield。
"out"是一个错字。在实际代码中为 2。感谢您推荐NOTHING类型。 -
@AnkUser 请查看预期结果的更新
-
错误信息是什么?它应该在错误列表中提供一些有用的描述。
标签: reporting-services ssrs-2012