我有一个表的形式为:分组值成周的ADATE响起使用LINQ to SQL或纯SQL
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到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?
有两行具有相同的开始日期,将永远如此吗? – 2011-04-01 11:39:44
而且你的样本日期范围不是独家! – 2011-04-01 12:01:53
范围可以是任何东西,有时会发生冲突,它们可以在任何日期开始和结束。每行代表一个员工(某种)的预期工作时间。 – ilivewithian 2011-04-01 15:30:37