PDA

Ver la Versión Completa : Ordenar una Sql con Union


sargento elias
21-11-2008, 16:13:43
Hola buenas tardes a todos, no soy muy experto en esto, y me gustaría saber cómo se puede ordenar ,por ejemplo por fecha esta sql , quiero hacerla funcionar en un query de Delphi7 (con Firebird 2.0)

SELECT 'EXP' EXPE,M.DH,M.IMP,M.SDP,M.FEC,M.DES1, E.ID, substring(CODEXP from 1 for 4) || '/' ||
substring(CODEXP FROM 5 FOR 2) || '/' ||
substring(CODEXP FROM 7 FOR 5) NUMEXP,
C.DES CON
FROM EXPEMOV M
INNER JOIN EXPEDIENTES E ON E.ID = M.IDEXP
INNER JOIN CONCEPTOS C ON C.ID = M.IDCON
WHERE M.FEC BETWEEN :DFEC AND :HFEC
AND M.SDP = :SDP
UNION SELECT 'EXH' EXPE,M.DH,M.IMP,M.SDP,M.FEC,M.DES1, E.ID, substring(CODEXH from 1 for 4) || '/' ||
substring(CODEXH FROM 5 FOR 2) || '/' ||
substring(CODEXH FROM 7 FOR 5) NUMEXP,
C.DES CON
FROM EXHMOV M
INNER JOIN EXHORTOS E ON E.ID = M.IDEXH
INNER JOIN CONCEPTOS C ON C.ID = M.IDCON
WHERE M.FEC BETWEEN :DFEC AND :HFEC
AND M.SDP = :SDP



Muchas gracias

ContraVeneno
21-11-2008, 16:20:23
al final agrega "Order By NombreDelCampo" o "Order By NúmeroDelCampo"

sargento elias
21-11-2008, 16:26:59
No eso no funciona , no sé si tendré que agrupar en paréntesis o es que el campo está en las dos selects

pero si añado sin más ORDER BY M.FEC al final me dice esto :::

Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Invalid command.
invalid ORDER BY clause.

Gracias por el interés anyway...

pOST-eDIT :!!!Vale con el número del campo está solucionado, MIL GRACIAS!!!.

hecospina
21-11-2008, 16:29:31
Hola
Prueba con
.....
order by 5

Caro
21-11-2008, 16:30:55
Hola sargentoelias, tienes que ordenar por el numero de campo.

Saluditos

ContraVeneno
21-11-2008, 16:55:33
No eso no funciona...
ORDER BY M.FEC

Solo como comentario, en SQL Server puedes utilizar el nombre, supongo que en Firebird también, el detalle es que tal vez debí haber dicho "debes utilizar el alias" en lugar del nombre, es decir, en lugar de poner "M.Fec", solo es necesario poner "Fec". Al menos eso funcionar en SQL Server.

En fin, que bueno que con el número ya quedó :D

Caro
21-11-2008, 17:11:05
También, solo como comentario, en Firebird no funciona con el nombre del campo o el alias que le des al campo, pero si con el numero de campo.

Saluditos

hecospina
21-11-2008, 22:46:29
Caro
Solo por aclarar, yo manejo Firebird 2.0 y no he tenido problemas con el ordenamiento me soporta cosas como estas

order by SUBSTRING(T.TIPO FROM 1 FOR 2)
order by 3 que es el numero del campo
order by aliascampo
order by sum(total)

solo que cuando se utiliza UNION para la consulta solo se puede hacer por el numero del campo

Caro
22-11-2008, 04:54:36
solo que cuando se utiliza UNION para la consulta solo se puede hacer por el numero del campo

Hola hecospina, gracias por la aclaración a veces no me explico bien, me refería justamente al UNION.

Saluditos