我有一张表格,其中载有关于工人的工作类型和工作时间的信息。
例如。
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。
答案 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。