我需要获取月度报告的数据,这些数据应该在所有周内排除星期日...我不能排除星期日。请检查以下查询:
select Name,Actual_Hours,round((Actual_Hours/((DATEDIFF(DAY,'12-01-2016' ,'12-14-2016')+1)*8.5))*100,0)as percentage
from (select Name , SUM(actual_Hours) Actual_Hours
from ( select Name,ACTUAL_HOURS=sum(DATEPART(hh,[Time_Taken_in_Min]))+sum(DATEPART(MINUTE,[Time_Taken_in_Min])) /60
FROM [HR_Admin].[dbo].[Mst_Daily_Report_Pds] where date between '12-01-2016' and '12-14-2016' and (DATENAME(weekday,Date)) not in ('sunday')
GROUP BY Name )o group by Name )a order by Actual_Hours desc
答案 0 :(得分:1)
不确切地知道您收到了什么错误但我没有在SQL中看到问题,但我相信它是因为在select查询中使用了DATEDIFF
而不是使用实际的日子。
检查以下查询,该查询使用实际天数(已在Where子句中删除了星期日)并使用较少的子查询。您可以通过仅考虑最里面的查询中的时间因素,然后在将所有小时数相加后四舍五入来进一步改善这一点。
另一个建议是避免将列名用作Date
之类的保留字,因为它可能会造成混淆,或者使用方括号中的列,例如[Date]
。
select Name
, sum(Actual_Hours) as Actual_Hours
, round((sum(Actual_Hours)/COUNT([Day])*8.5)*100,0) as percentage
from (select Name
, DATEPART(DAYOFYEAR,[Date]) as [Day]
, ACTUAL_HOURS=sum(sum(DATEPART(hh,[Time_Taken_in_Min]))+sum(DATEPART(MINUTE,[Time_Taken_in_Min])) /60)
FROM [HR_Admin].[dbo].[Mst_Daily_Report_Pds]
where date between '12-01-2016' and '12-14-2016'
and (DATENAME(weekday,[Date])) not in ('Sunday')
GROUP BY Name, [Date]
) a
GROUP BY Name
order by Actual_Hours desc