I'm trying to write a stored procedure that will prompt the user for a
date range and produce a report based on that date range and 4 incident
types. I only need count how may times these incidents happen within
the data range. The query looks like this
SELECT incident, @.Enter_Beginning_Date AS [Beginning Date],
@.Enter_Ending_Date AS [Ending Date], COUNT(*) AS Occurances
FROM dbo.Incident
WHERE (DateOccured BETWEEN @.Enter_Beginning_Date AND
@.Enter_Ending_Date) AND (incident = 'Customer Accident')
GROUP BY incident
This works fine, but I need to get incident = customer accident,
Customer Illness, Employee Accident and Employee Illness in my incident
table. When ever I try to add Incident = Customer Illness to this
query, I get no results. Any assistance will be greatly appreciated.First of all, how are you prompting the user for values thru Stored
procedures????
Your question is pretty hard to answer as you havent provided any info
about your table or Data...!
Do you have records that qualifies Incident = 'Customer Illness'...!
It would help people to help you if you post some DDL/DML codes to
understand where the problem is...|||sorry about the vagness,
The table I'm trying to query looks something like this
ID(int) Incident(nvarchar) DateOccured (datetime)
1200 Customer Illness 1/1/2003
1201 Customer Illness 1/2/2003
1202 Customer Accident 1/2/2003
1203 Customer Accident 1/3/2003
1204 Employee Accident 1/5/2003
1205 Employee Illness 1/6/2003
The stored procedure prompts the user for a beginning
(@.Enter_Beginning_Date) and ending date(@.Enter_Ending_Date) which uses
the DateOccured column for the specified date range. I want the query
to count the number of occurences that happen within the specified date
range. I want to create a report that looks loke this
Incident Number of Occurences
Customer Illness 2
Customer Accident 2
Employee Accident 1
Employee Illness 1
When ever I query for one incident (Customer Accident), the query will
work fine, but when I insert another statement [(incident = Customer
Illness) AND (incident = Customer Accident)] I get no results, when I
know there are at least 3 incidents of Customer Illness. Does this help?|||Based on the data you gave..
declare @.Enter_Ending_Date datetime
declare @.Enter_Beginning_Date datetime
set @.Enter_Ending_Date='1/2/2003'
set @.Enter_Beginning_Date='1/2/2003'
SELECT incident,
@.Enter_Beginning_Date AS [Beginning Date],
@.Enter_Ending_Date AS [Ending Date],
COUNT(*) AS Occurances
FROM Incident
WHERE (DateOccured BETWEEN @.Enter_Beginning_Date AND
@.Enter_Ending_Date) AND
(incident = 'Customer Illness') or (incident = 'Customer Accident')
--(incident = 'Customer Accident')
GROUP BY incident
/*******************************
RESULTSET
Customer Accident2003-01-02 00:00:00.0002003-01-02 00:00:00.0002
Customer Illness2003-01-02 00:00:00.0002003-01-02 00:00:00.0001|||On 26 Jan 2005 12:09:50 -0800, ndn_24_7 wrote:
(snip)
>The stored procedure prompts the user for a beginning
>(@.Enter_Beginning_Date) and ending date(@.Enter_Ending_Date) which uses
>the DateOccured column for the specified date range.
Hi ndn_27_7,
I presume you meant to write that the front-end app prompts the user for
these dates and passes them to SQL Server when calling the stored
procedure, as there is no way that a stored procedure will ever prompt for
input.
>When ever I query for one incident (Customer Accident), the query will
>work fine, but when I insert another statement [(incident = Customer
>Illness) AND (incident = Customer Accident)] I get no results, when I
>know there are at least 3 incidents of Customer Illness. Does this help?
The WHERE clause is checked against each row individually. No single row
will ever have both 'Customer Illness' and 'Customer Accident' in the same
column (incident).
SELECT incident, @.Enter_Beginning_Date AS [Beginning Date],
@.Enter_Ending_Date AS [Ending Date], COUNT(*) AS Occurances
FROM dbo.Incident
WHERE DateOccured BETWEEN @.Enter_Beginning_Date
AND @.Enter_Ending_Date
AND ( incident = 'Customer Accident'
OR incident = 'Customer Illness')
GROUP BY incident
or
SELECT incident, @.Enter_Beginning_Date AS [Beginning Date],
@.Enter_Ending_Date AS [Ending Date], COUNT(*) AS Occurances
FROM dbo.Incident
WHERE DateOccured BETWEEN @.Enter_Beginning_Date
AND @.Enter_Ending_Date
AND incident IN ('Customer Accident', 'Customer Illness')
GROUP BY incident
(Note that IN is just a short form for writing a bunch of OR's)
Best, Hugo
--
(Remove _NO_ and _SPAM_ to get my e-mail address)|||It worked very good, THank you for all your assistance
No comments:
Post a Comment