2016-12-14 39 views
2

我需要獲取月度報告的數據,該數據應該排除星期日在所有星期......我無法排除星期日。請檢查下面的查詢:查詢查找本月的第一天和最後一天,不包括星期日在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 
+0

此外,還只保留標籤與問題相關的標籤 – Spidey

回答

1

不知道你做什麼錯誤,但我沒有看到在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 
相關問題