我有一张表格,格式如下:
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 更好?