【发布时间】:2015-05-31 00:49:09
【问题描述】:
作为通过 SQL Server 2012 的报表生成器构建的报表的一部分,我试图衡量它“正式”花费工人完成各种任务的时间。在我的 Task 表中,我有一个 Task Created datetime 字段、一个 Task Resolved datetime 字段,并且我还有其他表用于它们的计时开/关时间,我可以从中获取数据。
我只想根据他们应该工作的时间来衡量。所以它不包括他们不工作的通宵时间,这意味着它不是那么简单
DATEDIFF(minutes,TaskCreated,TaskResolved).
我发现的一种方法是将他们每天花费多少小时作为单独的字段,并将这些字段相加:
Created |Resolved |Day1time|Day2time |Day3time |TotalTime
14/04/2015 20:00 |16/04/2015 10:00 |01:00:00|12:00:00 |01:00:00 |14:00:00
不幸的是,我不知道完成某项工作需要多长时间才能解决这个问题,所以我不知道需要使用多少字段,但代码显然是重复的,因此很糟糕,尤其是如果作业可能需要一个月或更长时间才能完成。
作为一个比 SQL 更熟悉 Java 和 C++ 等编程语言的人,在我看来,将创建和解析作为参数、每天进行一个循环以及增加当天停机时间的变量作为一个函数会更好.不幸的是,我似乎没有创建临时函数的权限,所以我想知道是否可以在 Select 语句中执行 while 循环来计算时间?我试过了这样做,但代码验证器说它无效。
抱歉,我没有任何代码来帮助解释我目前正在尝试做的事情,因为我离开了我的工作电脑,但最终我想要这样的东西:
Created | Resolved | Time Taken | Priority | Worker
01/01/2015 12:00 | 01/01/2015 13:00 | 01:00:00 | A | C Forbes
02/03/2015 20:00 | 03/03/2015 11:00 | 03:00:00 | B | J Flansburgh
31/05/2015 18:50 | 01/05/2015 10:50 | 00:10:00 | D | E Idle
14/04/2015 20:00 | 16/04/2015 10:00 | 14:00:00 | D | A Ng
C 福布斯 - 标准工作 - datediff 可以在这里工作
J Flansburgh - 工人在工作日 21:00 结束,09:00 开始,因此第 1 天 1 小时 + 第 2 天 2 小时 = 总共 3 小时
E 空闲 - 周日 19:00 完成,并在他应该在周一正式开始之前完成工作。 31 日星期日 10 分钟,星期一 1 日 0 分钟 = 10 分钟
A Ng:工作日 21:00 结束,09:00 开始... 14 日 1 小时+15 日 12 小时+16 日 1 小时 = 总共 14 小时
我在输入这个问题时的另一个想法是做一个 while 循环,一次从表中取出一行,从该单独的行中计算出时间,然后将每一行附加到一个新表中。这样会更好吗?
提前感谢任何试图提供帮助的人。
【问题讨论】:
标签: datetime while-loop sql-server-2012 subquery reportbuilder3.0