Thread: Creative use of CASE in a GROUP BY clause

Creative use of CASE in a GROUP BY clause

From
"Dorian Taylor"
Date:
Greets,

I'm trying to figure out how to craft a query that I can embed into a piece
of code that can be passed a bind value in order to dictate how it should
behave on GROUP BY, sparing me from having to write separate queries for N
functions and/or columns I may want to group my query by.

e.g. SELECT COUNT(foo) FROM bar GROUP BY CASE (? IS NOT NULL) THEN thiscol
ELSE thatcol END

If thiscol and thatcol aren't the same type, the CASE bombs out. I suppose
ultimately it would be a matter of reducing each column definition in the
CASE to a boolean expression, but I'm not sure what that would syntactically
look like, as simply declaring a column in GROUP BY is obviously shorthand
for something.

Thanks

Dorian

_________________________________________________________________
Send and receive Hotmail on your mobile device: http://mobile.msn.com



Re: Creative use of CASE in a GROUP BY clause

From
Masaru Sugawara
Date:
On Mon, 18 Mar 2002 13:14:46 
"Dorian Taylor" <leg0@hotmail.com> wrote:

> I'm trying to figure out how to craft a query that I can embed into a piece
> of code that can be passed a bind value in order to dictate how it should
> behave on GROUP BY, sparing me from having to write separate queries for N
> functions and/or columns I may want to group my query by.
> 
> e.g. SELECT COUNT(foo) FROM bar GROUP BY CASE (? IS NOT NULL) THEN thiscol
> ELSE thatcol END
> 
> If thiscol and thatcol aren't the same type, the CASE bombs out. I suppose


If so, you may need to cast one of them.

e.g. SELECT COUNT(foo) FROM bar   GROUP BY CASE WHEN (? IS NOT NULL)                THEN thiscol::TEXT
ELSEthatcol         -- if the type of thatcol is TEXT           END;
 


> ultimately it would be a matter of reducing each column definition in the
> CASE to a boolean expression, but I'm not sure what that would syntactically
> look like, as simply declaring a column in GROUP BY is obviously shorthand
> for something.
> 


Regards,
Masaru Sugawara