Ежедневный / еженедельный / ежемесячный поиск количества записей с помощью StoredProcedure - PullRequest
4 голосов
/ 16 марта 2010

Использование MS SQL Server . Я создал хранимую процедуру с именем SP_Get_CallsLogged.

У меня есть таблица с именем TRN_Call, и в ней есть один столбец с именем CallTime, который представляет собой DateTime.

У меня есть веб-страница в приложении, где пользователь вводит: -

  1. StartDate (DateTime)

  2. EndDate (DateTime)

  3. Период (ежедневно / еженедельно / ежемесячно) (varchar) (из DropDownList)

Я хочу получить Количество записей этих вызовов в моей таблице TRN_Call на основе указанного Периода (Ежедневно / Еженедельно / Ежемесячно), выбранного пользователем в DropDownList.

* * +1036 например,
StartDate ='1/18/2010 11:10:46 AM'
EndDate   ='1/25/2010 01:10:46 AM'
Period    =Daily

Таким образом, количество записей между этими вышеупомянутыми датами (StartDate + EndDate) должно быть определено таким образом, чтобы я мог ссылаться на эти значения отдельно, т.е. на следующее: -

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

и отправьте эти подсчеты в веб-приложение, чтобы эти подсчеты могли быть перечислены в Crystal Reports.

1 Ответ

2 голосов
/ 16 марта 2010

Я бы отредактировал вашу хранимую процедуру, чтобы передать дату начала и дату окончания, выбранные на вашей веб-странице, чтобы вы могли включить их в предложение WHERE.

-- Daily
SELECT CallTime, COUNT(*) AS 'Records Found'
FROM TRN_Call
WHERE CallTime BETWEEN @StartDate AND @EndDate
GROUP BY CallTime

Еженедельно может быть довольно сложным.

Если вы отметите эту ссылку , вы увидите функцию (ниже), которую вы можете использовать для получения еженедельных результатов

например. Так что создайте функцию ниже

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  
...