だから私がやりたいことができるかどうかはわかりませんが、ここに行きます...私は2つの保存された手続きを持っています... ...結果は、フィールドがDate、PersonID、Hours、Minutesです。
2013-04-03 10000305 8 30
2013-05-03 10000305 8 30
彼らは営業日内に通話を完了し、各通話には通話時間が記録されます。私の 2 番目の SP は、その日に彼らが実際に働いた時間を計算します。結果は次のとおりです。フィールドは同じで、日付、人、時間、分です。
2013-04-25 10000305 7 20
2013-04-26 10000305 11 7
問題: 2 つの SP に電話してから整理する必要があります。私が望んでいたのは、すべてを 1 つの SP にまとめて、以下のような要約を作成できることでした。問題は、2 番目の SP が合計を取得するために 1 日に多くのレコードをカウントするのに対し、最初の SP は 1 日と期間だけであることです。合計しようとすると、結果が狂ってしまい、何百万ものレコードを買い戻しました。簡単な方法はありますか、それとも不可能ですか?
**Date** **User** **Hours** **Minutes** **Actual Hours** **Act Mins**
2013-04-25 10000305 8 30 11 7
以下にコード スニペットを示します。どちらも機能は非常に似ています。
CREATE TABLE #TotalUsedTime
(PersonID Int,
[Date] DateTime,
Office Int,
[Hours] Int,
[Minutes] Int)
DECLARE @GetUsedTime NVARCHAR(MAX);
SET @GetUsedTime = N'
Select PersonID, [Date], Office, TotalUsedTime / 3600 AS Hours, (TotalUsedTime % 3600) / 60 AS Minutes
From
( Select PersonID, [Date], Office, DateDiff(Second, Starttime, End) AS TotalUsedTime From Calls Where Completed IS NOT NULL) x '
INSERT #TotalUsedTime EXEC SP_Executesql @GetUsedTime;
Select Cast([Date] as date) Date, #TotalUsedTime.PersonID,
Cast(sum([hours] * 60 + [minutes])/60 as int) As Hours,
Sum([hours] * 60 + [minutes]) - 60 * cast(sum([hours] * 60 + [minutes])/60 as int) As Minutes,
People.Fullname
From #TotalUsedTime
Inner Join People on People.PersonID = #TotalUsedTime.PersonID
Where #TotalUsedTime.[Date] Between @StartDate and @EndDate and Office = @Office
and People.PersonID = @PersonID
Group by cast([DATE] as Date), #TotalUsedTime.PersonID, People.FullName]
End