Usar case

Iniciado por yoelrodguez, 6 Mayo 2015, 01:44 AM

0 Miembros y 1 Visitante están viendo este tema.

yoelrodguez

Hola a todos,  quisiera saber si existe la forma de que un SELECT pueda seleccionar una subconsulta  indistintamente  con datos distintos y con la misma cantidad de columnas.  Buscando encontré CASE pero cuando coloco la subconsulta me envía este error.
[Err] 1241 - Operand should contain 1 column(s)


SELECT
@var2 := SUBSTR(tabla1.colunma1 FROM 1 FOR 10),
CASE WHEN @var1 <> @var2 THEN
@var2 := SUBSTR(tabla1.colunma1 FROM 1 FOR 10),
(SELECT columna1, columna2 FROM tabla1)
ELSE
(SELECT columna1, columna2 FROM tabla2)
END
FROM tabla1



Saludos 

ZeroVzla

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-Procedure

Tal 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.