2010-03-16 5 views
4

Utilisation de MS SQL Server .J'ai créé une procédure stockée nommée SP_Get_CallsLogged.Journalier/Hebdomadaire/Nombre d'enregistrements par mois Recherche via StoredProcedure

J'ai une table nommée TRN_Call, et elle a une colonne nommée CallTime qui est un DateTime.

J'ai une page Web dans mon application où l'utilisateur entre: -

  1. StartDate (DateTime)

  2. EndDate (DateTime)

  3. Période (Quotidien/Hebdomadaire/Mensuel) (varchar) (à partir de DropDownList)

Je veux obtenir le Nombre d'enregistrements de ces appels dans ma table TRN_Call sur la base de la période indiquée (jour/semaine/mois) sélectionnée par l'utilisateur dans le DropDownList.

par exemple.

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

Ainsi, le nombre d'enregistrements entre ces ci-dessus les dates mentionnées (StartDate + EndDate) devrait venir d'une manière que je puisse faire référence à ces comptes séparément-à-dire les éléments suivants: -

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 

et les envoyer compte dans l'application Web afin que ces comptes puissent être répertoriés dans Crystal Reports.

+2

Vous ne devez pas appeler votre procédure stockée 'sp_xxxxxx' comme sp_ est un terme réservé et indique au serveur pour vérifier tous les construit SP à l'avance. – cjk

+0

@Peter Lang: Merci pour la recommandation. –

Répondre

2

Je modifierais votre procédure stockée pour transmettre la date de début et la date de fin sélectionnées dans votre page Web afin que vous puissiez les inclure dans la clause WHERE.

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

Chaque semaine peut être assez complexe.

Si vous cochez cette link vous verrez une fonction (ci-dessous) que vous pouvez utiliser pour vous aider à obtenir les résultats hebdomadaires

par exemple Donc, créer la fonction ci-dessous

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 

Maintenant, vous devriez être en mesure d'exécuter le code ci-dessous qui devrait regrouper par semaine. Pour choisir entre si vous voulez Jour, Semaine ou Année, vous devrez également passer la période sélectionnée par l'utilisateur à votre procédure stockée.

(ps. Havent a tour à faire encore l'année)

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

Cela ne fonctionne pas, ou répondez à la question (groupe basé sur la longueur de période sélectionnée, par exemple quotidienne, hebdomadaire, mensuelle) – cjk

+0

@ck: Merci pour votre précieux conseil ....... @KevChadders: Merci beaucoup KevChadders, avec votre aide, je suis en mesure d'obtenir les résultats hebdomadaires. Mais besoin d'aide concernant le problème quotidien et mensuel. Reste du peuple, s'il vous plaît aidez-moi à cet égard. –

+0

@KevChadders: J'ai fait trois fonctions distinctes pour chaque jour, chaque semaine et chaque mois. Et puis l'une de ces trois fonctions est appelée sur la base de la liste déroulante sélectionnée par l'utilisateur. Donc, mon problème est résolu grâce à la logique mentionnée ci-dessus. Encore merci beaucoup KevChadders !!! –