Foro de elhacker.net

Programación => Bases de Datos => Mensaje iniciado por: yoelrodguez en 6 Mayo 2015, 01:44 am



Título: Usar case
Publicado por: yoelrodguez en 6 Mayo 2015, 01:44 am
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)

Código:
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 


Título: Re: Usar case
Publicado por: ZeroVzla en 17 Mayo 2015, 05:51 am
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 (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.