2010-03-08 96 views
3

表1双总问题

ID | WorkTime 
----------------- 
001 | 10:50:00 
001 | 00:00:00 
002 | .... 

烹饪时间数据类型是VARCHAR ** *(。

SELECT ID, 
     CONVERT(varchar(10), TotalSeconds1/3600) + ':' + RIGHT('00' + CONVERT(varchar(2), (TotalSeconds1 - TotalSeconds1/3600 * 3600)/60), 2) + ':' + RIGHT('00' + CONVERT(varchar(2), TotalSeconds1 - (TotalSeconds1/3600 * 3600 + (TotalSeconds1 - TotalSeconds1/3600 * 3600)/60 * 60)), 2) AS TotalWork 
From (SELECT ID, 
       SUM(DATEDIFF(second, CONVERT(datetime, '1/1/1900'), 
       CONVERT(datetime, '1/1/1900 ' + WorkTime))) AS TotalSeconds1 
      FROM table1 
     group by ID) AS tab1 
where id = '001' 

上述查询是显示

“的总的时间加倍” 对于实施例

从table1我想计算总工作时间,当我运行上面的查询它显示

ID工作时间

001 21:40:00 
002..., 

但它应该表现出这样的

ID Worktime 

001 10:50:00 
..., 

如何避免双重总工作时间的。如何修改我的查询。

需要查询帮助

+0

@Gopal,你昨天问过的前一个(重复)问题发生了什么?我花了一些时间,而不是被删除? – 2010-03-08 04:58:19

+0

@Philip - 错误以不同的方式出现,我终于找到了错误。这意味着22:00:00而不是11点00:00的总数翻倍。查询中有错误。 – Gopal 2010-03-08 05:02:52

+0

工作时间是一天的实际时间还是工作时间? – Kangkan 2010-03-08 05:09:40

回答

2

创建表,并在问题描述添加数据后,我还有的10:50:00预期的应答。不知道为什么它不工作的OP ...

为了简化查询,并提高性能,可能会更好,为WorkTime类型定义从VARCHAR改变INT。然后将工作间隔保存为总秒数。

然后,总结间隔量然后在最终值上执行显示格式会很简单。 (最好在应用程序中,而不是在数据库中)

+2

刚刚在我们的系统上进行了测试,查询的行为如预期。 OP应该发布一个(无)工作示例,完成创建表并插入记录。 – 2010-03-08 07:55:49