Problemas con union

Me imagino que ya se tiene que estar aburriendo con estos errores básicos pero creame que son algo complejos para mi.
El siguiente código es de un procedure en el que trato de hacer la union de dos tablas a, b, c
Si @opcion = 'fa' me debería hacer la union de a y b y en caso contrario de a y c pero me muestra un inconveniente en el union y la única forma que me ha resultado esto es repitiendo la consulta a por el if y el else en realidad el código que esta abajo es algo pequeño con todo lo que se debe hacer en las dos consultas si me puede dar la mano le quedare muy agradecido
Declare @opcion varchar(2), @fechax varchar(10),@empresa varchar(3)
set @empresa = '001'
set @fechax = '05/05/2005'
set @opcion = 'PE'
select empresa,tipo,numero,tipo_doc,numero_doc,cliente,fecha,'' as pago,total,0 as val_ret,0 as val_iva
from fadocume where empresa = @empresa and tipo = @opcion and fecha = @fechax and anulado = 0
union
if @opcion = 'FA'
select EMPRESA,tipo,NUMERO,tipo_doc,NUMERO_DOC,cliente ,fecha,forma,sum(TOTAL),sum( val_ret),sum(val_iva)
from fadocume WHERE TIPO = 'PG' and anulado = 0 AND FECHA = @fechax and anulado = 0
group by EMPRESA,tipo,NUMERO,tipo_doc,NUMERO_DOC,cliente,fecha,forma
else
select EMPRESA,tipo,NUMERO,tipo_doc,NUMERO_DOC,cliente ,fecha,forma,sum(TOTAL),sum( val_ret),sum(val_iva)
from fadocume WHERE TIPO = 'PG' and anulado = 0 AND FECHA = @fechax and anulado = 0
group by EMPRESA,tipo,NUMERO,tipo_doc,NUMERO_DOC,cliente,fecha,forma

1 Respuesta

Respuesta
1
Deja todo igual pero en vez de realizar los selects en forma directa y los union, manda cada sentencia a una tabla temporal, es decir, la primera sentencia la envías a la tabla temporal, como veo que todo esta en un stored procedure lo puedes dejar al principio del mismo, cuando intentes realizar el if, solo envías la consulta a la misma tabla y al final realizas un select directo de la tabla temporal y listo.
Disculpa dejame ver si entendí creo una tabla con el tipo de datos select y luego hago insert si no es molestia dame un segmento de código pequeño para ver si no me equivoco
Utiliza la sentencia create table #Temporal y los atributos o nombres de los campos de acuerdo a los datos que extraes en tu primer sentencia.
Después realizas un insert into #Temporal select la primer sentencia y así con las siguientes.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas