Hi,
Can anyone help me in writing this sql query, i want to group my select statement depending on the parameter user is passing.
Say when @.group='Cell' I want to group by CellID otherwise different conditions, something like below query but it is not working. I know we can't use case directly in where but please let me know if there is any other work around.
I don't want to use dynamic query and also this is big SP so i dont want to break sp in four conditions.
declare @.group varchar(10)
set @.group='Cell'
select cellid,sum(count)
FROM CellImpressionFact
WHERE ImpressionTypeLevelId = 2
AND ImpressionTypeId = 4
group by
case when group='Cell' then GROUP BY CellId
else group by activityID
end
This is not a good idea really. I would use dynamic SQL to provide this kind of capability if you really need to. It is possible (see code) but I would be very concerned about performance.
create table test
(
grouper int,
grouper2 int,
value decimal(10,5)
)
go
insert into test
select 1,1,10
union all
select 1,2,10
union all
select 1,3,10
union all
select 2,1,10
go
declare @.groupby varchar(10)
set @.groupBy = 'grouper2'
select max(grouper) as grouper,
max(grouper2) as grouper2,
sum(value) as valueSum
from test
group by case when @.groupBy = 'grouper' then grouper else grouper2 end
Note that the grouper2 column is of any value when you group by grouper, and vice versa (say it five times fast.)
No comments:
Post a Comment