SQL Server - Consulta Union

 
Vista:

Consulta Union

Publicado por gonza (13 intervenciones) el 26/04/2007 15:35:12
Buenas...Tengo una consulta que esta compuesta por dos consultas unidas mediante UNION... necesito ordenar el resultado por un campo q no pertenece a ninguno de los select y sé q con el ORDER BY, si interviene un UNION, esto no se puede hacer. ¿Tengo alguna forma de poner un campo en el select sin q me aparezca en el resultado?
gracias...saludos
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Consulta Union

Publicado por Isaías (3308 intervenciones) el 26/04/2007 18:09:47
Coloca un ejemplo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Consulta Union

Publicado por gonza (13 intervenciones) el 26/04/2007 18:54:23
Este es un ejemplo de mi consulta...Como muestra l final el ORDER BY necesito ordenarla por ese campo, pero no esta en el SELECT

use mybase
Select P.ProvNombre as [Proveedor],

case when CC.CpCategoria=1 then
convert(nvarchar,CC.CpFechaComp,110)
when CC.CpCategoria=0 then
convert(nvarchar,CC.CpFechaComp,101)
end as [Fecha],

C.ComAbrev as [Comprobante],
CC.CpLetra as [Letra],
CC.CpPtoVenta as [PV],
CC.CpNumCom as [Numero],
'' as [Fecha de Vencimiento],
M.MonSimb as [Moneda],

(select count(*) from CCProVen
Where CpEmpresa = CC.CpEmpresa and
CpSuc=CC.CpSuc and
CpNi=CC.CpNi) as [Cuotas],

case when CC.CpTotal > 0 then
convert(nvarchar,Convert(money,abs(CC.CpTotal)),0)
else
''
end as [Debe],

case when CC.CpTotal < 0 then
convert(nvarchar,Convert(money,abs(CC.CpTotal)),0)
else
''
end as [Haber]

From CCPro as CC

INNER JOIN Proveedores as P ON P.ProvCod = CC.CpProv
INNER JOIN Comprobantes as C ON C.ComCod = CC.CpTipoComp
INNER JOIN Moneda as M ON M.MonCod = CC.CpMoneda

Group by P.ProvNombre,
CC.CpCategoria,
CC.CpFechaComp,
C.ComAbrev,
CC.CpLetra,
CC.CpPtoVenta,
CC.CpNumCom,
M.MonSimb,
CC.CpTotal,
C.ComSigno,
CC.CpEmpresa,
CC.CpSuc,
CC.CpNi

------------------------------------------------------------------------
union
------------------------------------------------------------------------

Select P.ProvNombre as [Proveedor],

case when O.OpCategoria = 1 then
convert(nvarchar,O.OpFechaPago,110)
when O.OpCategoria=0 then
convert(nvarchar,O.OpFechaPago,101)
end as [Fecha],

C.ComAbrev as [TIPO],
'' as [Letra],
'' as [PV],
O.OpNumPago as [Numero],
'' as [Fecha Vencimiento],
M.MonSimb as [Moneda],
'' as [Cuotas],
case when (select CCPro.CpTotal from CCPro
where CCPro.CpEmpresa = CC.CpEmpresa and
CCPro.CpSuc = CC.CpSuc and
CCPro.CpNi = CC.CpNi) < 0 then
convert(nvarchar,Convert(money,abs(O.OpTotal)),0)
else
''
end as [Debe],
case when (select CCPro.CpTotal from CCPro
where CCPro.CpEmpresa = CC.CpEmpresa and
CCPro.CpSuc = CC.CpSuc and
CCPro.CpNi = CC.CpNi) > 0 then
convert(nvarchar,Convert(money,abs(O.OpTotal)),0)
else
''
end as [Haber]

From OrdenPago as O

INNER JOIN Proveedores as P ON P.ProvCod = O.OpProv
INNER JOIN Moneda as M ON M.MonCod = O.OpMoneda
INNER JOIN Comprobantes as C ON C.ComCod = O.OpComp
INNER JOIN OrdenPagoComp as OPC on OPC.OpNi = o.OpNi
INNER JOIN CCpro as CC on CC.CpNi = OPC.CpNi

-------------------------------------------------------------------------

order by CC.CpNi
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Consulta Union

Publicado por Isaías (3308 intervenciones) el 26/04/2007 22:04:32
gonza

Al utilizar la clausula UNION, debe exitir la columna CpNi en alguna de las tablas referencias en el FROM ¿Esto es correcto?, ¿Se cumple la regla?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Consulta Union

Publicado por gonza (13 intervenciones) el 26/04/2007 22:59:10
SI, el campo CpNi pertenece a la tabla de CCPRO. Pero como existe la clausula UNION me obliga a tener en el ORDER BY, campos que esten incluidos en el SELECT y obviamente en alguna de las tablas del FROM..pero si o si en el SELECT; justamente esto es lo que quiero evitar...
De ninguna manera debo listar el campo CpNi y debo ordenar esta consulta por él.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Consulta Union

Publicado por Isaías (3308 intervenciones) el 26/04/2007 23:38:58
A ver, esto funciona:

SELECT COL1, COL2
FROM TABLA
ORDER BY COLX

Esto NO funciona:

SELECT COL1, COL2
FROM TABLA
UNION
SELECT COLX, COLZ
FROM TABLA2
ORDER BY COLP

Ya que COLP solo existe para TABLA2 y esta intentando ORDENAR ambos conjutos de resultado por el UNION
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Consulta Union

Publicado por gonza (13 intervenciones) el 27/04/2007 05:12:46
si ya se lo q funciona y lo q no...a ver, lo que quiero lograr es esto:

TABLA 1: Campo 1.1 (numeric)
Campo 1.2(nvarchar)
Campo 1.3(int)

TABLA 2: Campo 2.1 (numeric)
Campo 2.2(nvarchar)

consulta:

SELECT CAMPO 1.1, CAMPO 1.2
FROM TABLA 1

UNION

SELECT CAMPO 2.1, CAMPO 2.2
FROM TABLA 2

ORDER BY CAMPO 1.3

Esta consulta no funciona!!!, el UNION solo permite ordenar por campos q formen parte del SELECT, pero es lo q necesito hacer de alguna forma.
Ahora, pregunta:
¿Hay posibilidad de lograrlo?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Consulta Union

Publicado por Isaías (3308 intervenciones) el 27/04/2007 18:28:18
Ya te di una respuesta a tu pregunta y es NO, a menos claro, que tu campo 1.3, existiera tanto en TABLA 1 como TABLA 2

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Consulta Union

Publicado por gonza (13 intervenciones) el 27/04/2007 20:08:01
ok, ahora si existiera en las dos tablas..y no pertenece a ningun select...es posible ordenar la consulta por él?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Consulta Union

Publicado por Isaías (3308 intervenciones) el 27/04/2007 20:14:21
No debes tener problema alguno
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Consulta Union

Publicado por Isaías (3308 intervenciones) el 27/04/2007 20:20:35
gonza

Te pregunto algo:

¿Si la clausula UNION lo que va a hacer es UNIR el conjunto de resultados que estas haciendo y convertirlos a UNICOS (registros), que caso tiene no colocar una columna por la que quieres ORDENAR?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Consulta Union

Publicado por gonza (13 intervenciones) el 27/04/2007 21:11:47
A mi no me hace ningun problema, no me molesta que este campo por el cual quiero ordener...lo q pasa es que la consulta es para un listado que estoy haciendo desde vb .net y mi cliente no quiere que aparezca ese campo en el listado...este problema lo puedo solucionar desde vb pero necesito por varias cuestiones q me venga totalmente bien desde sql.
Y con respecto a lo anterior, si, tengo problemas...me dice que el cmpo debe estar si osi en el select...
Gracias igual...si encontras alguna forma avisame [email protected]
saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar