次のようなユーザーの入力時間の表があります。
テーブル名は timebilling です:
田畑 :
TimeBillingId int
UserId int
StartTime datetime
StopTime datetime
ElapsedTime time(7)
NormalTime time(7)
OverTime time(7)
ここで、すべてのユーザーの合計時間を計算するレポートが必要です。Total ElapsedTime と同様に、月ごとの合計通常時間と合計残業時間です。
しかし、私の月は15日から15日です。だから私は結果が次のようになることを望みます:
User Month TotalTime NormalTime OverTime
1 March-April 120:58:00 100:58:00 20:00:00
2 March-April 97:40:23 97:40:23 00:00:00
1 April-May 15:00:00 14:30:00 00:30:00
2 April-May 89:30:00 80:15:00 09:15:00
このクエリを使用して、月ごとに機能させています。
select MONTH(tym.StopTIme) as Month, YEAR(tym.StopTime) as Year, U.UserId,
ISNULL((select cast(sum(datediff(second,0,t.ElapsedTime))/3600 as varchar(20)) + ':' + right('0' + cast(sum(datediff(second,0,t.ElapsedTime))/60%60 as varchar(20)),2) + ':' + right('0' + cast(sum(datediff(second,0,t.ElapsedTime))%60 as varchar(20)),2)
from TimeBilling t where MONTH(t.StopTime) = MONTH(tym.StopTime) and YEAR(t.StopTime) = YEAR(tym.StopTime) and t.UserId = u.UserId),'00:00:00') as TotalTime,
ISNULL((select cast(sum(datediff(second,0,t.NormalTime))/3600 as varchar(20)) + ':' + right('0' + cast(sum(datediff(second,0,t.NormalTime))/60%60 as varchar(20)),2) + ':' + right('0' + cast(sum(datediff(second,0,t.NormalTime))%60 as varchar(20)),2)
from TimeBilling t where MONTH(t.StopTime) = MONTH(tym.StopTime) and YEAR(t.StopTime) = YEAR(tym.StopTime) and t.UserId = u.UserId),'00:00:00') as NormalTime,
ISNULL((select cast(sum(datediff(second,0,t.OverTime))/3600 as varchar(20)) + ':' + right('0' + cast(sum(datediff(second,0,t.OverTime))/60%60 as varchar(20)),2) + ':' + right('0' + cast(sum(datediff(second,0,t.OverTime))%60 as varchar(20)),2)
from TimeBilling t where MONTH(t.StopTime) = MONTH(tym.StopTime) and YEAR(t.StopTime) = YEAR(tym.StopTime) and t.UserId = u.UserId),'00:00:00') as OverTime
from TimeBilling tym, Users u
where tym.UserId = u.UserId
1日から30日/31日のように、月ごとに合計時間を取得しました。しかし、私は15日から15日になりたいです。しかし、SQLクエリまたはストアドプロシージャで取得する方法がわかりません。
誰でも私を助けてくれますか?