Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.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# 通过StoredProcess搜索每日/每周/每月记录计数_C#_Asp.net_Sql_Sql Server_Crystal Reports - Fatal编程技术网

C# 通过StoredProcess搜索每日/每周/每月记录计数

C# 通过StoredProcess搜索每日/每周/每月记录计数,c#,asp.net,sql,sql-server,crystal-reports,C#,Asp.net,Sql,Sql Server,Crystal Reports,使用MSSQLServer。我创建了一个名为SP\u Get\u callsLogg的存储过程 我有一个名为TRN\u Call的表,它有一个名为CallTime的列,这是一个日期时间 我的应用程序中有一个网页,用户在其中输入:- 开始日期(日期时间) 结束日期(日期时间) 期间(每日/每周/每月)(varchar)(从下拉列表) 我想根据用户在DropDownList中选择的指定时间段(每日/每周/每月),在我的表TRN_Call中获取这些呼叫的记录计数 e、 g 因此,上述日期(开始日期+结

使用MSSQLServer。我创建了一个名为
SP\u Get\u callsLogg
的存储过程

我有一个名为
TRN\u Call
的表,它有一个名为
CallTime
的列,这是一个日期时间

我的应用程序中有一个网页,用户在其中输入:-

  • 开始日期(日期时间)

  • 结束日期(日期时间)

  • 期间(每日/每周/每月)(varchar)(从下拉列表)

  • 我想根据用户在DropDownList中选择的指定时间段(每日/每周/每月),在我的表
    TRN_Call
    中获取这些呼叫的记录计数

    e、 g

    因此,上述日期(开始日期+结束日期)之间的记录计数应以某种方式进行,以便我可以单独参考这些计数,即:-

    Date 1/18/2010 Records Found 5
    Date 1/19/2010 Records Found 50
    Date 1/20/2010 Records Found 15
    Date 1/21/2010 Records Found 32
    Date 1/22/2010 Records Found 12
    Date 1/23/2010 Records Found 15
    Date 1/24/2010 Records Found 17
    Date 1/25/2010 Records Found 32
    

    然后将这些计数发送到Web应用程序,以便这些计数可以在Crystal Reports中列出。

    我将编辑存储过程,以传递在网页中选择的开始日期和结束日期,以便您可以将它们包含在
    WHERE
    子句中

    -- Daily
    SELECT CallTime, COUNT(*) AS 'Records Found'
    FROM TRN_Call
    WHERE CallTime BETWEEN @StartDate AND @EndDate
    GROUP BY CallTime
    
    每周一次可能相当复杂

    如果您选中此项,您将看到一个函数(如下),您可以使用它来帮助您获得每周结果

    e、 因此,创建下面的函数

    create function FiscalWeek (@startMonth varchar(2), @myDate datetime)  
    returns int  
    as  
    begin  
    declare @firstWeek datetime  
    declare @weekNum int  
    declare @year int  
    set @year = datepart(year, @myDate)+1  
    --Get 4th day of month of next year, this will always be in week 1  
    set @firstWeek = convert(datetime, str(@year)+@startMonth+'04', 102)  
    --Retreat to beginning of week  
    set @firstWeek = dateadd(day, (1-datepart(dw, @firstWeek)), @firstWeek)  
    while @myDate < @firstWeek --Repeat the above steps but for previous year  
     begin  
      set @year = @year - 1  
      set @firstWeek = convert(datetime, str(@year)+@startMonth+'04', 102)  
      set @firstWeek = dateadd(day, (1-datepart(dw, @firstWeek)), @firstWeek)  
     end  
    set @weekNum = (@year*100)+((datediff(day, @firstweek, @myDate)/7)+1)  
    return @weekNum  
    end  
    

    您不应该调用存储过程
    sp\uxxxxxx
    ,因为sp\ux是一个保留术语,并指示服务器事先检查所有内置sp。@Peter Lang:谢谢您的建议。这不起作用,或者回答问题(根据所选时段长度分组,例如每天、每周、每月)@ck:谢谢你宝贵的提示@KevChadders:非常感谢KevChadders,在你的帮助下,我能够得到每周的结果。但是在日常和每月的问题上需要帮助。其余的人,请在这方面帮助我。@KevChadders:我已经为每天、每周和每月制作了三个单独的功能。然后根据用户选择的下拉菜单调用这三个函数中的一个。因此,我的问题是通过上述逻辑解决的。再次感谢KevChadders!!!
    create function FiscalWeek (@startMonth varchar(2), @myDate datetime)  
    returns int  
    as  
    begin  
    declare @firstWeek datetime  
    declare @weekNum int  
    declare @year int  
    set @year = datepart(year, @myDate)+1  
    --Get 4th day of month of next year, this will always be in week 1  
    set @firstWeek = convert(datetime, str(@year)+@startMonth+'04', 102)  
    --Retreat to beginning of week  
    set @firstWeek = dateadd(day, (1-datepart(dw, @firstWeek)), @firstWeek)  
    while @myDate < @firstWeek --Repeat the above steps but for previous year  
     begin  
      set @year = @year - 1  
      set @firstWeek = convert(datetime, str(@year)+@startMonth+'04', 102)  
      set @firstWeek = dateadd(day, (1-datepart(dw, @firstWeek)), @firstWeek)  
     end  
    set @weekNum = (@year*100)+((datediff(day, @firstweek, @myDate)/7)+1)  
    return @weekNum  
    end  
    
    SELECT dbo.FiscalWeek('04', CallTime), dbo.FiscalWeek('04', CallTime)%100 ,  COUNT(*) AS 'Records Found - Weekly'
    FROM TRN_Call
    WHERE CallTime BETWEEN @StartDate AND @EndDate
    GROUP BY dbo.FiscalWeek('04', CallTime), dbo.FiscalWeek('04', CallTime)%100