У меня есть таблица, которая имеет вид:
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, но если мне нужно вызвать хранимую процедуру, это нормально. На самом деле я не получил ни малейшего представления о том, как это осуществить.
Как я могу начать с этим?
UPDATE
Я закончил тем, что написал это как процедуру хранения, которая работает, но, на мой взгляд, это не очень хорошее решение.
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?