Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Ordenar una Sql con Union (https://www.clubdelphi.com/foros/showthread.php?t=61777)

sargento elias 21-11-2008 16:13:43

Ordenar una Sql con Union
 
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)

Código SQL [-]
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
Código SQL [-]
..... 
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

Cita:

Empezado por sargento elias (Mensaje 327219)
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

Cita:

Empezado por hecospina (Mensaje 327312)
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


La franja horaria es GMT +2. Ahora son las 20:38:19.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi