次の形式のテーブルがあります。
StartDate[date], EndDate[date], HoursPerWeek[int]
そして、このように少し満たされています:
StartDate | EndDate | HoursPerWeek
01/01/2010 | 31/12/2010 | 37
01/01/2010 | 31/03/2010 | 16
05/03/2010 | 31/10/2010 | 9
私が作成する必要があるのは、特定の日付範囲での労働時間数の週ごとの内訳を示す表です。
理想的には、これをlinq to sqlで実行しますが、ストアドプロシージャを呼び出す必要がある場合は問題ありません。私はこれを実装する方法について最初の手がかりを本当に持っていません。
どうすればこれを始めることができますか?
アップデート
私はこれをストアプロシージャとして作成することになりましたが、これは機能しますが、私の目にはきれいな解決策ではありません。
CREATE PROCEDURE prcGetHoursWorked
(
@StartDate DATE,
@EndDate DATE
)
AS
CREATE TABLE #Results
(
WeekStart DATE,
TotalHours INT
)
DECLARE @WeekOffset INT
DECLARE @FirstDayOfStartWeek DATE
DECLARE @HoursThisWeek INT
SET @WeekOffset = 0
SET @FirstDayOfStartWeek = dbo.fnc_StartOfWeek(@StartDate, 2);
WHILE (DATEDIFF(wk, @StartDate, @EndDate) > @WeekOffset)
BEGIN
SELECT @HoursThisWeek = SUM(HoursPerWeek) FROM StaffCost
WHERE NOT (
Start> DATEADD(wk, @WeekOffset + 1, @FirstDayOfStartWeek)
OR
[End] < DATEADD(wk, @WeekOffset, @FirstDayOfStartWeek)
)
INSERT INTO #Results
VALUES(DATEADD(wk, @WeekOffset, @FirstDayOfStartWeek), @HoursThisWeek)
SET @WeekOffset = @WeekOffset + 1
END
SELECT * FROM #Results
これをセットベースの操作として実行することは可能ですか、それともlinqからsqlに直接実行する方がよいでしょうか?