Domanda

Questo è il mio primo tentativo di rispondere alla mia domanda, dal momento che qualcuno potrebbe imbattersi in questo e quindi potrebbe essere di aiuto. Utilizzando Firebird, voglio combinare i risultati di due query utilizzando UNION ALL, quindi ordinare l'output risultante su una determinata colonna. Qualcosa del tipo:

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

Le parentesi provengono da una sintassi valida per altri database e sono necessarie per assicurarsi che gli argomenti di UNION ALL (un'operazione definita per funzionare su tabelle - ovvero un insieme di record non ordinato) don ' t cerca di essere ordinato individualmente. Tuttavia non sono riuscito a far funzionare questa sintassi in Firebird - come si può fare?

È stato utile?

Soluzione

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

Altri suggerimenti

I nomi dei campi non devono essere uguali. Ecco perché non puoi usare il nome del campo nell'ordine per.
È possibile utilizzare invece l'indice di campo. Come in:

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

Che ne dici di:

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

Almeno nelle versioni più recenti di Firebird funziona se ordini per " Numero " invece di usare un alias.

In Firebird 1.5 funziona per me

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

e poi

select C1, C2, C3 from V1 order by C3

Esegui UNION ALL in una vista (senza la clausola ORDER BY), quindi seleziona dalla vista usando ORDER BY.

Lo spostamento di order by in una coda di query non ha nessun effetto sull'output di datagrid.

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
)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top