2016-12-14 4 views
2

日曜日を除くすべての週...日曜日を除外する必要がある月次レポートのデータを取得する必要があります。日曜日を除外できません。親切に以下のクエリを確認してください。SQLのsundayを除く現在の月の最初と最後の日を検索するクエリ

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曜日の日曜日はすでに削除されています)を使用し、サブクエリを少なくする以下のクエリを確認してください。最も内側のクエリの時間係数のみを取り、その後、すべての時間を合計した後に四捨五入することで、これをさらに改善できます。

もう1つの方法は、予約語として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 
関連する問題