Pregunta

Este es mi primer intento de responder a mi propia pregunta, ya que alguien puede encontrarse con esto, por lo que podría ser de ayuda. Usando Firebird, quiero combinar los resultados de dos consultas usando UNION ALL, luego ordenar el resultado resultante en una columna dada. Algo así como:

(select C1, C2, C3 from T1)
union all 
(select C1, C2, C3 from T2)
order by C3

Los paréntesis provienen de una sintaxis válida para otras bases de datos, y son necesarios para asegurarse de que los argumentos de UNION ALL (una operación definida para trabajar en tablas, es decir, un conjunto de registros desordenados ) don ' t trate de ser ordenado individualmente. Sin embargo, no pude hacer que esta sintaxis funcione en Firebird, ¿cómo se puede hacer?

¿Fue útil?

Solución

SELECT C1, C2, C3
FROM (
    select C1, C2, C3 from T1
    union all 
    select C1, C2, C3 from T2
)
order by C3

Otros consejos

No se requiere que los nombres de campo sean iguales. Es por eso que no puede usar el nombre del campo en el orden por.
Puede usar el índice de campo en su lugar. Como en:

(select C1, C2, C3 from T1)
union all 
(select C7, C8, C9 from T2)
order by 3  

¿Qué tal:

select C1, C2, C3 from T1
union all 
select C1, C2, C3 from T2
order by 2

Al menos en las versiones más recientes de Firebird funciona si ordena por " Number " en lugar de usar un alias.

En Firebird 1.5 esto funciona para mí

create view V1 (C1, C2, C3) as
  select C1, C2, C3 from T1
  union all 
  select C1, C2, C3 from T2

y luego

select C1, C2, C3 from V1 order by C3

Realice UNION ALL en una vista (sin la cláusula ORDER BY), luego seleccione de la vista usando ORDER BY.

Mover order by a una cola de consulta no tiene ningún efecto para generar la cuadrícula de datos.

select * from (
    select first 1
        C1
    from T1
    order by id desc
)
union all
select * from (
    select first 1
        C1
    from T2
    order by id desc
)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top