Please start any new threads on our new site at https://forums.sqlteam.com. We've got lots of great SQL Server experts to answer whatever question you can come up with.

 All Forums
 General SQL Server Forums
 New to SQL Server Programming
 Why group by not grouping

Author  Topic 

sqlbug
Posting Yak Master

201 Posts

Posted - 2010-03-23 : 13:22:19
I have this query like:

SELECT GROUP_NAME, PARAM_NAME, TIME_NAME, COUNT(EVT.EVT_NUM) As EventCount
FROM ......
GROUP BY GROUP_NAME, PARAM_NAME, TIME_NAME, EVT.EVT_NUM

It's getting individual counts, but not grouping by GROUP_NAME...etc.
What do I need to do?
Thanks,

Sqlbug

vijayisonly
Master Smack Fu Yak Hacker

1836 Posts

Posted - 2010-03-23 : 13:24:57
Remove EVT.EVT_NUM from GROUP BY
Go to Top of Page

sqlbug
Posting Yak Master

201 Posts

Posted - 2010-03-23 : 13:30:22
Ahhhh....thought I need to include all of the columns.
Thanks so much.
Go to Top of Page

vijayisonly
Master Smack Fu Yak Hacker

1836 Posts

Posted - 2010-03-23 : 13:41:46
Np..The column on which you are performing an aggregate function shouldn't be in the GROUP BY clause...otheriwse, the aggregate becomes meaningless.
Go to Top of Page

sqlbug
Posting Yak Master

201 Posts

Posted - 2010-03-23 : 14:16:22
Its actually is complicated than I thought. I need to use a case statement on that column like:
SELECT GROUP_NAME, PARAM_NAME, TIME_NAME,
CASE
WHEN GI.GUIDE_PARAM IS NOT NULL AND EVT.EVT_NUM IS NOT NULL
THEN CAST(COUNT(EVT.EVT_NUM) AS VARCHAR)
WHEN EVT.EVT_NUM IS NULL AND GI.GUIDE_PARAM IS NULL THEN 'n/a'
WHEN GI.GUIDE_PARAM IS NOT NULL AND EVT.EVT_NUM IS NULL THEN '0'
ELSE 'n/a'
END AS EventCount
FROM ......
GROUP BY GROUP_NAME, PARAM_NAME, TIME_NAME, GI.GUIDE_PARAM, EVT.EVT_NUM

In that case - It doesn't allow me to exclude the EVT.EVT_NUM from the GROUP BY.
Sorry about the confusion.

Sqlbug
Go to Top of Page

vijayisonly
Master Smack Fu Yak Hacker

1836 Posts

Posted - 2010-03-23 : 14:26:06
Can you show the full query?
Go to Top of Page

sqlbug
Posting Yak Master

201 Posts

Posted - 2010-03-23 : 15:21:30
Hi Vijay, here's the whole thing. Hope it helps.

ALTER PROC [dbo].[.......]
(
@START_DATE datetime,
@END_DATE datetime
)
AS
BEGIN
DECLARE @tblTimeCodes TABLE
(
TimeCode varchar(5),
CodeName varchar(25)
)
INSERT INTO @tblTimeCodes SELECT TIME_CODE, TIME_NAME FROM TIME_CODES WHERE TIME_CODE = '1'
INSERT INTO .....
SELECT DISTINCT Codes.CodeName, Codes.TimeCode, G.GROUP_NAME, PIN.PARAM_NAME,
CASE
WHEN GI.GUIDE_PARAM IS NOT NULL AND EVT.EVT_NUM IS NOT NULL
THEN CAST(COUNT(EVT.EVT_NUM) AS VARCHAR)
WHEN EVT.EVT_NUM IS NULL AND GI.GUIDE_PARAM IS NULL THEN 'n/a'
WHEN GI.GUIDE_PARAM IS NOT NULL AND EVT.EVT_NUM IS NULL THEN '0'
ELSE 'n/a'
END AS EventCount, @START_DATE as 'StartDate', @END_DATE as 'EndDate',
CAST(GI.GUIDE_LEVEL AS VARCHAR(20)) + ' ' + CAST(UC.UNIT_ABBREV AS VARCHAR(20)) AS 'Objective'
FROM
GROUP_INFO G
INNER JOIN @tblTimeCodes Codes
ON 1=1
LEFT OUTER JOIN GROUP_PARAMETER_XREF GPX
ON GPX.GPOUP_ID = G.GROUP_ID
AND GPX.GP_COLTYPE = '1'
INNER JOIN PARAMETER_INFO PIN
ON GPX.GP_PARAMETER = PIN.PARAM_ID
INNER JOIN GUIDELINE_INFO GI
ON GI.GUIDE_PARAM = PIN.PARAM_ID
AND GUIDE_TIME = Codes.TimeCode
INNER JOIN TIME_CODES TC
ON TC.TIME_CODE = GI.GUIDE_TIME
LEFT OUTER JOIN EVENTS_LOG_TEST EVT
ON EVT.EVT_GROUP_ID = G.GROUP_ID
AND EVT.EVT_START_DATE >= @START_DATE
AND EVT.EVT_END_DATE <= @END_DATE
AND EVT.EVT_INTERVAL = Codes.TimeCode
AND EVT.EVT_GUIDELINE_UNIT = GI.GUIDE_UNITS
AND EVT.EVT_PARAM_ID = GI.GUIDE_PARAM
LEFT OUTER JOIN UNIT_CODES UC
ON UC.UNIT_CODE = EVT.EVT_GUIDELINE_UNIT
GROUP BY PIN.PARAM_NAME, G.GROUP_NAME, Codes.TimeCode, GI.GUIDE_PARAM, Codes.CodeName, GUIDE_TIME,
EVT.EVT_NUM,EVT_END_DATE, EVT_START_DATE, EVT_END_TIME, EVT_START_TIME, GUIDE_LEVEL, UNIT_ABBREV
ORDER BY GROUP_NAME, PIN.PARAM_NAME, Codes.TimeCode
END
Go to Top of Page

sqlbug
Posting Yak Master

201 Posts

Posted - 2010-03-24 : 18:05:26
Vijay...no ideas?
Go to Top of Page
   

- Advertisement -