Problema con UNION y ORDER en tabla temporal

14/06/2007 - 23:15 por Cristian Meneses | Informe spam
Buenas.
Tengo dentro de un procedimiento el siguiente codigo, el cual resulta
todo ok, pero no me lo ordena como quisiera. Pongo la clausula ORDER
al final y nada. Cual puede ser el error?

CREATE TABLE #AuxDetalles(
IDTipo char(2) NOT NULL,
IDRef int NOT NULL,
IDMoneda tinyint NOT NULL,
Fecha smalldatetime NOT NULL,
Detalles varchar(100) NOT NULL,
Observaciones varchar(100) NOT NULL,
Moneda varchar(10) NOT NULL,
Importe float
)

INSERT INTO #AuxDetalles
SELECT
'PE' AS IDTipo,
IDPago as 'IDRef',
Pagos.idMoneda,
Fecha,
LTRIM(descEgreso) as 'Detalles',
descPago as 'Observaciones',
simbolo as 'Moneda',
(monto * -1) as 'Importe'
FROM Pagos
INNER JOIN Egresos ON Egresos.IDEgreso = Pagos.IDEgreso
INNER JOIN Monedas ON Monedas.IDMoneda = Pagos.IDMoneda
WHERE IDCaja = @IDCaja
UNION ALL
SELECT
'CC' AS IDTipo,
IDCobro as 'IDRef',
Cobros.idMoneda as 'IDMoneda',
Fecha,
(RTRIM(descCliente) + ' - Cuota ' + RTRIM(CONVERT(VARCHAR(15),
Cuota)) + ' - ' + RTRIM(descConvenio)) as 'Detalles',
obsCobro as 'Observaciones',
simbolo as 'Moneda',
monto as 'Importe'
FROM Cobros
INNER JOIN Monedas ON Monedas.IDMoneda = Cobros.IDMoneda
INNER JOIN Cuotas ON Cuotas.IDCuota = Cobros.IDCuota
INNER JOIN Convenios ON Convenios.IDConvenio = Cuotas.IDConvenio
INNER JOIN Clientes ON Convenios.IDCliente = Clientes.IDCliente
WHERE IDCaja = @IDCaja
ORDER BY Fecha DESC


Saludos

Cristian Meneses

Preguntas similare

Leer las respuestas

#1 Carlos Bolivar
15/06/2007 - 07:49 | Informe spam
Amigo, cuando yo realizo una consulta, y deseo ordenarla, siempre el SQL
Server antepone lo siguiente "SELECT TOP 100 PERCENT " ve el TOP 100,
verifica eso en tu select, puede ser una posible solucion..

Saludos

"Cristian Meneses" wrote:

Buenas.
Tengo dentro de un procedimiento el siguiente codigo, el cual resulta
todo ok, pero no me lo ordena como quisiera. Pongo la clausula ORDER
al final y nada. Cual puede ser el error?

CREATE TABLE #AuxDetalles(
IDTipo char(2) NOT NULL,
IDRef int NOT NULL,
IDMoneda tinyint NOT NULL,
Fecha smalldatetime NOT NULL,
Detalles varchar(100) NOT NULL,
Observaciones varchar(100) NOT NULL,
Moneda varchar(10) NOT NULL,
Importe float
)

INSERT INTO #AuxDetalles
SELECT
'PE' AS IDTipo,
IDPago as 'IDRef',
Pagos.idMoneda,
Fecha,
LTRIM(descEgreso) as 'Detalles',
descPago as 'Observaciones',
simbolo as 'Moneda',
(monto * -1) as 'Importe'
FROM Pagos
INNER JOIN Egresos ON Egresos.IDEgreso = Pagos.IDEgreso
INNER JOIN Monedas ON Monedas.IDMoneda = Pagos.IDMoneda
WHERE IDCaja = @IDCaja
UNION ALL
SELECT
'CC' AS IDTipo,
IDCobro as 'IDRef',
Cobros.idMoneda as 'IDMoneda',
Fecha,
(RTRIM(descCliente) + ' - Cuota ' + RTRIM(CONVERT(VARCHAR(15),
Cuota)) + ' - ' + RTRIM(descConvenio)) as 'Detalles',
obsCobro as 'Observaciones',
simbolo as 'Moneda',
monto as 'Importe'
FROM Cobros
INNER JOIN Monedas ON Monedas.IDMoneda = Cobros.IDMoneda
INNER JOIN Cuotas ON Cuotas.IDCuota = Cobros.IDCuota
INNER JOIN Convenios ON Convenios.IDConvenio = Cuotas.IDConvenio
INNER JOIN Clientes ON Convenios.IDCliente = Clientes.IDCliente
WHERE IDCaja = @IDCaja
ORDER BY Fecha DESC


Saludos

Cristian Meneses


Respuesta Responder a este mensaje
#2 Alejandro Mesa
15/06/2007 - 15:35 | Informe spam
Cristian Meneses,

Como sabes que no te lo ordena?

Se esta ordenando un resultado antes de insertarlo. sin embargo, para
seleccionar desde la tabla y chequear lo se inserto, debes usar nuevamente la
clausula "order by".

select *
from #AuxDetalles
order by Fecha


AMB


"Cristian Meneses" wrote:

Buenas.
Tengo dentro de un procedimiento el siguiente codigo, el cual resulta
todo ok, pero no me lo ordena como quisiera. Pongo la clausula ORDER
al final y nada. Cual puede ser el error?

CREATE TABLE #AuxDetalles(
IDTipo char(2) NOT NULL,
IDRef int NOT NULL,
IDMoneda tinyint NOT NULL,
Fecha smalldatetime NOT NULL,
Detalles varchar(100) NOT NULL,
Observaciones varchar(100) NOT NULL,
Moneda varchar(10) NOT NULL,
Importe float
)

INSERT INTO #AuxDetalles
SELECT
'PE' AS IDTipo,
IDPago as 'IDRef',
Pagos.idMoneda,
Fecha,
LTRIM(descEgreso) as 'Detalles',
descPago as 'Observaciones',
simbolo as 'Moneda',
(monto * -1) as 'Importe'
FROM Pagos
INNER JOIN Egresos ON Egresos.IDEgreso = Pagos.IDEgreso
INNER JOIN Monedas ON Monedas.IDMoneda = Pagos.IDMoneda
WHERE IDCaja = @IDCaja
UNION ALL
SELECT
'CC' AS IDTipo,
IDCobro as 'IDRef',
Cobros.idMoneda as 'IDMoneda',
Fecha,
(RTRIM(descCliente) + ' - Cuota ' + RTRIM(CONVERT(VARCHAR(15),
Cuota)) + ' - ' + RTRIM(descConvenio)) as 'Detalles',
obsCobro as 'Observaciones',
simbolo as 'Moneda',
monto as 'Importe'
FROM Cobros
INNER JOIN Monedas ON Monedas.IDMoneda = Cobros.IDMoneda
INNER JOIN Cuotas ON Cuotas.IDCuota = Cobros.IDCuota
INNER JOIN Convenios ON Convenios.IDConvenio = Cuotas.IDConvenio
INNER JOIN Clientes ON Convenios.IDCliente = Clientes.IDCliente
WHERE IDCaja = @IDCaja
ORDER BY Fecha DESC


Saludos

Cristian Meneses


Respuesta Responder a este mensaje
#3 Cristian Meneses
15/06/2007 - 20:57 | Informe spam
Hola Alejandro
Veo que no lo ordena porque luego de hacer SELECT * FROM #AuxDetalles
(sin where), los datos insertados no fueron ordenados antes.
Requiero que #AuxDetalles ya esté ordenado por el campo Fecha y no
utilizando la forma que propones. En caso de que no se pueda, es
posible ordenar luego de haber insertado? como seria?
Saludos

Cristian Meneses
Respuesta Responder a este mensaje
#4 Salvador Ramos
16/06/2007 - 14:10 | Informe spam
Hola,

Los sistemas de bases de datos relacionales están orientados a conjuntos, no
a filas.
Concretamente en SQL Server (al igual que en muchos otros, aunque hay
excepciones) no puedes garantizar un orden salvo que lo especifiques
esplícitamente en la cláusula order by.

Un saludo
Salvador Ramos

www.helpdna.net (información sobre SQL Server y Microsoft .Net)
www.helpdna.net/acerca_de_salvador_ramos.htm


"Cristian Meneses" escribió en el mensaje
news:
Hola Alejandro
Veo que no lo ordena porque luego de hacer SELECT * FROM #AuxDetalles
(sin where), los datos insertados no fueron ordenados antes.
Requiero que #AuxDetalles ya esté ordenado por el campo Fecha y no
utilizando la forma que propones. En caso de que no se pueda, es
posible ordenar luego de haber insertado? como seria?
Saludos

Cristian Meneses
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida