2010-03-16 80 views
4

使用MS SQL Server。我製作了一個名爲SP_Get_CallsLogged的存儲過程。每日/每週/每月記錄數通過StoredProcedure搜索

我有一個名爲TRN_Call的表,它有一列名爲CallTime這是一個DateTime。

我在我的應用程序中的網頁用戶在其中輸入: -

  1. 起始日期(DATETIME)

  2. 結束日期(DATETIME)

  3. (每日/每週/每月)(varchar)(來自DropDownList)

我想要得到的記錄這些通話的在我的表TRN_Call用戶在DropDownList選擇的指定時間內(每日/每週/每月)的基礎上。

例如

StartDate ='1/18/2010 11:10:46 AM' 
EndDate ='1/25/2010 01:10:46 AM' 
Period =Daily 

所以提到的日期,上述這些的記錄計數(起始日期+結束日期)應該進來的方式,這樣我可以指那些數分別即如下: -

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中列出。

+2

你不應該調用存儲過程'sp_xxxxxx'作爲以sp_是一個保留期限,並表示到服務器,檢查所有的內置的SP預先。 – cjk 2010-03-16 08:50:45

+0

@Peter Lang:感謝您的建議。 – 2012-03-10 23:50:39

回答

2

我會編輯您的存儲過程通過在網頁中選擇的開始日期和結束日期,以便您可以包括他們WHERE子句。

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

每週可能相當複雜。

如果選中此link你會看到一個功能(如下圖),你可以用它來幫助你獲得每週結果

例如因此,創建以下功能

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)[email protected]+'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)[email protected]+'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 

現在,您應該能夠運行下面的代碼,應該按幾周進行分組。如果您希望每天,每週或年之間選擇,你也將不得不通過用戶所選的時間以您的存儲過程。

(PS。還沒有得到全面執行年至今)

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 
+0

這不起作用,或回答問題(根據所選的週期長度組,如每天,每週,每月) – cjk 2010-03-16 08:51:51

+0

@ck:您的寶貴提示謝謝....... @KevChadders:非常感謝KevChadders,在您的幫助下,我能夠獲得每週結果。 但需要有關每日和每月問題的幫助。 其餘的人,請在這方面幫助我。 – 2010-03-16 13:29:49

+0

@KevChadders:我爲每個每日,每週和每月製作了三個獨立的函數。然後根據用戶選擇的下拉菜單調用這三個函數中的一個。所以我的問題是通過上述邏輯解決的。再次感謝很多KevChadders! – 2012-03-10 23:58:51

相關問題