查询以不包括SQL周日的本月的第一个和最后一天



我需要获取每月报告的数据,该报告应在周日的所有几周内排除……无法排除周日。请检查以下查询:

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

不知道您遇到的错误,但我在SQL中没有看到问题,但我相信这是因为在选择查询中使用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

最新更新