C# 通过StoredProcess搜索每日/每周/每月记录计数
使用MSSQLServer。我创建了一个名为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 因此,上述日期(开始日期+结
SP\u Get\u callsLogg
的存储过程
我有一个名为TRN\u Call
的表,它有一个名为CallTime
的列,这是一个日期时间
我的应用程序中有一个网页,用户在其中输入:-
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