Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用C#或SQL按周分组的月度报告_C#_Sql_Report - Fatal编程技术网

用C#或SQL按周分组的月度报告

用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

我正在创建一个应用程序,该应用程序应在仪表板中显示一个条形图,显示一个月内按周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 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设置的缘故?)