Declaración de SQL Server 2005/2008 Group By con parameters sin usar SQL dynamic?

¿Existe alguna manera de escribir el Procedimiento almacenado de SQL Server que debe ser fuertemente tipado (es decir, devolver el set de resultados conocido de las columnas) y que su statement de grupo sea dinámica?

Algo como:

SELECT SUM( Column0 ) FROM Table1 GROUP BY @MyVar 

Intenté lo siguiente también:

 SELECT SUM( Column0 ) FROM Table1 GROUP BY CASE @MyVar WHEN 'Column1' THEN Column1 ELSE Column2 

La segunda statement solo funciona en escenarios donde los types db de Column1 y Column2 son iguales. Si no son el motor SQL arroja un error que dice algo similar a: "La conversión falló al convertir el valor nvarchar 'SYSTEM' al tipo de datos [The Different TYPE]."

¿Qué puedo hacer para lograr un set de resultados sólido y, sin embargo, tener una parte dinámica, es decir, el mero en mi caso? Esto estará expuesto a LINQ.

EDITAR:

Como parece, puedes hacerlo, pero NO deberías! Absolutamente excesivo. Las testings mostraron cifras de planes de ejecución mil veces más lentos. Y solo se volverá más lento con sets de resultados más grandes.

Puede agrupar en una constante que podría ser útil

 SELECT SUM(Column0), CASE @MyVar WHEN 'Column1' THEN Column1 ELSE '' END AS MyGrouping FROM Table1 GROUP BY CASE @MyVar WHEN 'Column1' THEN Column1 ELSE '' END 

Editar: para la incompatibilidad de types de datos y valores múltiples, y esto le permite agrupar en ambas columnas …

 SELECT SUM(Column0), CASE @MyVar WHEN 'Column1' THEN Column1 ELSE NULL END AS Column1, CASE @MyVar WHEN 'Column2' THEN Column2 ELSE NULL END AS Column2 FROM Table1 GROUP BY CASE @MyVar WHEN 'Column1' THEN Column1 ELSE NULL END, CASE @MyVar WHEN 'Column2' THEN Column2 ELSE NULL END 

Estás a punto de dispararte en el pie y estás pidiendo una bala más grande.

El único enfoque sensato para esto es separar el IF en una statement de control de flujo T-SQL:

 IF (0 = @MyVar) SELECT SUM(Column0) FROM Table1 GROUP BY Column1; ELSE IF (1 = @MyVar) SELECT SUM(Column0) FROM Table1 GROUP BY Column2; ESLE IF (2 = @myVar) SELECT SUM(Column0) FROM Table1 GROUP BY Column3; 

Lo último que desea del optimizador de consultas es generar un plan que tenga que AGRUPAR por una condición determinada por una variable.