0

だから私がやりたいことができるかどうかはわかりませんが、ここに行きます...私は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
4

0 に答える 0