Las úncas soluciones que tienes son o construir las sentencias dinámicamente (creando el string con el valor de la variable en el momento), o bien una
sentencia preparada, que hace la misma tarea, pero dentro de la base. Esto es porque el GROUP BY requiere si o si que el agrupamiento sea por el nombre un campo de la tabla, de modo que el string de la sentencia tiene que contener ese campo si o si.
En el primer caso, lo deberás hacer en la aplicación. No hay otra solución.
El segundo caso requerirá un Store Procedure, o bien una sentencia EXECUTE donde se pasen los parámetros. En cualquier caso, debes construir la sentencia con las variables como lo muestra el link.