计算列中的累计小时数

时间:2014-01-21 15:21:38

标签: sql sql-server count sum

我有一张表格,其中载有关于工人的工作类型和工作时间的信息。

例如。

work_id | user_id | work_type | hours_spent
-------------------------------------------------   
    1   |     1   |  Maintain |     7
    2   |     1   |  sick     |     4  
    3   |     1   |  maintain |     3
    4   |     1   |  maintain |     6
    5   |     2   |  Web      |     5
    6   |     2   |  Develop  |     8
    7   |     2   |  develop  |     5
    8   |     3   |  maintain |     5
    9   |     3   |  sick     |     7
    10  |     3   |  sick     |     7

我想计算每个用户在某种工作上花费的累计小时数,以显示如下内容:

user id | work_type | hours_spent
-----------------------------------
    1   |  maintain |     16 
    1   |  sick     |      4
    2   |  Web      |      5
    2   |  develop  |     13
    3   |  maintain |      5
    3   |  sick     |     14

我现在使用的sum()函数现在返回hours_spent列中的所有小时。这是我想要实现的正确功能吗?

我正在使用SQL Server 2008 R2。

1 个答案:

答案 0 :(得分:4)

SELECT 
  user_id, 
  work_type = LOWER(work_type), 
  hours_spent = SUM(hours_spent)
FROM dbo.tablename
GROUP BY user_id, LOWER(work_type)
ORDER BY user_id, LOWER(work_type);
  • 除非您拥有区分大小写的排序规则,否则您不需要LOWER()。如果你这样做,一致地输入这些字符串 - 或者更好的是,对这些字符串使用查找表并在主表中存储一个tinyint。