Hola,
Bueno creo que deberías probar mejor usando algo llamado "stored procedures" / "procedimientos almacenados", lee sobre PL/SQL. El case te permite hacer el tipo de condición que quieres pero como te dice el error la idea es que le case devuelva una columna en el select. Si te fijas tienes un select principal a la tabla "tabla1" y dentro de un select ¿qué se especifican? pues columnas.
Con PL/SQL puedes un crear procedimiento y dentro del mismo puedes armar/crear/especificar querys para luego ejecutarlos.
A continuación un link en el que explican cómo crear querys dinámicos en sql server, que aunque no es tu objetivo principal verás en la sección "Dynamic SQL in a Stored Procedure" cómo crean un procedimiento que ejecuta distintos querys dependiendo de ciertas condiciones.
http://www.codeproject.com/Articles/20815/Building-Dynamic-SQL-In-a-Stored-ProcedureTal vez si nos colocas qué quieres lograr con eso podamos darte soluciones con distintas aproximaciones. Por ahora, así como lo tienes y como lo quieres no vas a poder hacerlo.
Saludos.