用C#或SQL按周分组的月度报告
我正在创建一个应用程序,该应用程序应在仪表板中显示一个条形图,显示一个月内按周1到周的记录数:用C#或SQL按周分组的月度报告,c#,sql,report,C#,Sql,Report,我正在创建一个应用程序,该应用程序应在仪表板中显示一个条形图,显示一个月内按周1到周的记录数: Example (July): Week 1 (2014-07-01 to 2014-07-05) = 30 records Week 2 (2014-07-06 to 2014-07-12) = 15 records Week 3 (2014-07-13 to 2014-07-19) = 50 records Week 4 (2014-07-20 to 2014-07-26) = 24 record
Example (July):
Week 1 (2014-07-01 to 2014-07-05) = 30 records
Week 2 (2014-07-06 to 2014-07-12) = 15 records
Week 3 (2014-07-13 to 2014-07-19) = 50 records
Week 4 (2014-07-20 to 2014-07-26) = 24 records
Week 5 (2014-07-27 to 2014-07-31) = 6 records
我见过几个例子,但它们似乎都集中在一年中的一周。如果没有添加该周的记录,则报告应显示该周的0。我所看到的所有示例都使用Group By Date,如果有一周的相应记录,这将只输出一个计数。尝试以下函数,传入monthend Date,然后返回weeks
CREATE FUNCTION WeeksOfTheMonth(@MothEndDate DATETIME)
RETURNS
@DateOfMonth TABLE(
StartDate DATETIME,
EndDate DATETIME,
WeekNo INT
)
AS
BEGIN
DECLARE @NoOfWeeks AS INT,
@StartDateNo AS INT,
@EndDateNo AS INT,
@Count AS INT
SELECT
@NoOfWeeks = DATEPART(WEEK,DAY(@MothEndDate)),
@StartDateNo = 1,
@EndDateNo = 5,
@Count = 1
WHILE(@NoOfWeeks > 0)
BEGIN
INSERT INTO @DateOfMonth(StartDate, EndDate, WeekNo)
SELECT DATEADD(day, DATEDIFF (day, 1, DATEADD(month, DATEDIFF(month, 0, @MothEndDate), 0) -1) /7*7 + 5, @StartDateNo),
DATEADD(day, DATEDIFF (day, 1, DATEADD(month, DATEDIFF(month, 0, @MothEndDate), 0) -1) /7*7 + 6, @EndDateNo),
@Count
SELECT
@StartDateNo = @StartDateNo + 7,
@EndDateNo = @EndDateNo + 7,
@NoOfWeeks = @NoOfWeeks - 1,
@Count = @Count + 1
END
RETURN
END
就像
SELECT * FROM WeeksOfTheMonth('31 Aug 2014')
可能重复@cahinton你是对的,上面的帖子确实是我的解决方案。谢谢在下面看到我的答案,它将分组并显示周和0。我正在测试它,如果它给我想要的结果,我将添加评论并接受它。有人能给我一个LINQ替代答案吗?你的周输出跳过星期天。(可能是由于@DATEFIRST设置的缘故?)