[英]SQL Server, how to sum based on day of the week
我有一张桌子可以保持出勤率。 它包含三列:
createdby (varchar(30))
TimeSheetDate (dateTime)
Workinghours (integer)
我想查找一周中某一天的总工作时间。 例如
Monday Tuesday Wednesday
------------------------------
10 9 11
我很难获得基于DOW的总数。
这是我的查询:
SELECT
createdby,
CASE
WHEN dbo.udf_DayOfWeek(TimeSheetDate) = 'Monday'
THEN sum(WorkingHours) as Monday
WHEN dbo.udf_DayOfWeek(TimeSheetDate) = 'Tuesday'
THEN sum(WorkingHours) as Tuesday
WHEN dbo.udf_DayOfWeek(TimeSheetDate) = 'Wednesday'
THEN sum(WorkingHours) as Wednesday
WHEN dbo.udf_DayOfWeek(TimeSheetDate) = 'Thursday'
THEN sum(WorkingHours) as Thursday
End
FROM
TS.TimesheetsDetails
WHERE
CreatedDate <= '2014-09-26' AND
CreatedDate >= '2014-09-19'
GROUP BY
createdby, dbo.udf_DayOfWeek(TimeSheetDate)
但它不起作用,并给出错误。
任何人都可以提供适当的指导吗? 顺便说一句,函数udf_DayOfWeek()
返回星期几。
这看起来像是有条件的总和。 关键是列不能是条件列 ,只能是聚合内的值 。 因此,您必须将case语句放入SUM()
:
select createdby,
sum(case when dbo.udf_DayOfWeek(TimeSheetDate)='Monday' then WorkingHours else 0 end) as Monday,
sum(case when dbo.udf_DayOfWeek(TimeSheetDate)='Tuesday' then WorkingHours else 0 end) as Tuesday,
...
from TS.TimesheetsDetails
where CreatedDate between '2014-09-19' and '2014-09-26'
group by createdby
注意1:如果您也想按星期汇总,我不明白为什么要按星期几分组。 我已经删除了。
注意2:我不确定为什么要使用UDF而不是内置的DATEPART
函数来获取星期几。
另外,您可以透视一下,看起来更干净一些:
select createdby, Monday, Tuesday, ...
from (
select createdby, dbo.udf_DayOfWeek(TimeSheetDate) as dow, WorkingHours
from TS.TimesheetsDetails
where CreatedDate between '2014-09-19' and '2014-09-26'
) x
pivot (
sum(WorkingHours)
for dow in ([Monday],[Tuesday],...)
) p
尝试这个
但是我不确定
SELECT createdby, CASE WHEN dbo.udf_DayOfWeek(TimeSheetDate)='Monday' THEN sum(WorkingHours) end as Monday,case WHEN dbo.udf_DayOfWeek(TimeSheetDate)='Tuesday' THEN sum(WorkingHours) end as Tuesday,case WHEN dbo.udf_DayOfWeek(TimeSheetDate)='Wednesday' THEN sum(WorkingHours) end as Wednesday,case WHEN dbo.udf_DayOfWeek(TimeSheetDate)='Thursday' THEN sum(WorkingHours) end as Thursday
FROM TS.TimesheetsDetails WHERE CreatedDate <='2014-09-26' and CreatedDate>='2014-09-19' GROUP BY createdby, dbo.udf_DayOfWeek(TimeSheetDate)`
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.