Gostaria de saber se existe alguma maneira de trazer ordens diferentes dentro de uma união de selects. Dentro do SQL abaixo está o ponto onde, teoricamente, interessa: determinar uma ordem num conjunto de dados unidos a outro com uma ordenação distinta ou sem ordenação.
Este SQL é designado para um cursor e, portanto, evitaria a criação de uma tabela temporária. está tudo direitinho, só falta esse problema de ORDER.
SELECT A.CODPAI CODPAI, B.NO_PAIS DESCRICAO,
SUM(A.FOBATU) ACUM_FOB_ANO_ATU,
SUM(A.FOBATU) * 100 /*/ TOT_ACUM_FOB_ANO_ATU ACUM_PART_ANO_ATU*/,
SUM(A.FOBANT) ACUM_FOB_ANO_ANT,
SUM(A.FOBANT) * 100 /*/ TOT_ACUM_FOB_ANO_ANT ACUM_PART_ANO_ANT*/,
REPLACE( TO_CHAR( DECODE(SUM(A.FOBANT),0,0,
(SUM(A.FOBATU) - SUM(A.FOBANT)) / SUM(A.FOBANT) * 100) ,'999D99'), '#######', NULL) ACUM_VAR,
(SUM(A.FOBATU) - SUM(A.FOBMAT)) mês_FOB_ANO_ATU,
(SUM(A.FOBATU) - SUM(A.FOBMAT)) * 100 /*/ TOT_mês_FOB_ANO_ATU mês_PART_ANO_ATU*/,
(SUM(A.FOBANT) - SUM(A.FOBMAN)) mês_FOB_ANO_ANT,
(SUM(A.FOBANT) - SUM(A.FOBMAN)) * 100 /*/ TOT_mês_FOB_ANO_ANT mês_PART_ANO_ANT*/,
REPLACE( TO_CHAR( DECODE((SUM(A.FOBANT) - SUM(A.FOBMAN)),0,0,
((SUM(A.FOBATU) - SUM(A.FOBMAT)) - (SUM(A.FOBANT) - SUM(A.FOBMAN))) /
(SUM(A.FOBANT) - SUM(A.FOBMAN)) * 100) ,'999D99'), '#######', NULL) mês_VAR
FROM BD.BCEPAP A, BD.T200_PAIS B
WHERE A.CODPAI = B.CO_PAIS
AND A.CODPAI <> '990'
GROUP BY A.CODPAI, B.NO_PAIS
-- AQUI ESTÁ O PROBLEMA!!! *******************************************************
ORDER BY 3 DESC
-- *******************************************************************************
UNION
SELECT A.CODPAI CODPAI, B.NO_PAIS DESCRICAO,
SUM(A.FOBATU) ACUM_FOB_ANO_ATU,
SUM(A.FOBATU) * 100 /*/ TOT_ACUM_FOB_ANO_ATU ACUM_PART_ANO_ATU*/,
SUM(A.FOBANT) ACUM_FOB_ANO_ANT,
SUM(A.FOBANT) * 100 /*/ TOT_ACUM_FOB_ANO_ANT ACUM_PART_ANO_ANT*/,
REPLACE( TO_CHAR( DECODE(SUM(A.FOBANT),0,0,
(SUM(A.FOBATU) - SUM(A.FOBANT)) / SUM(A.FOBANT) * 100) ,'999D99'), '#######', NULL) ACUM_VAR,
(SUM(A.FOBATU) - SUM(A.FOBMAT)) mês_FOB_ANO_ATU,
(SUM(A.FOBATU) - SUM(A.FOBMAT)) * 100 /*/ TOT_mês_FOB_ANO_ATU mês_PART_ANO_ATU*/,
(SUM(A.FOBANT) - SUM(A.FOBMAN)) mês_FOB_ANO_ANT,
(SUM(A.FOBANT) - SUM(A.FOBMAN)) * 100 /*/ TOT_mês_FOB_ANO_ANT mês_PART_ANO_ANT*/,
REPLACE( TO_CHAR( DECODE((SUM(A.FOBANT) - SUM(A.FOBMAN)),0,0,
((SUM(A.FOBATU) - SUM(A.FOBMAT)) - (SUM(A.FOBANT) - SUM(A.FOBMAN))) /
(SUM(A.FOBANT) - SUM(A.FOBMAN)) * 100) ,'999D99'), '#######', NULL) mês_VAR
FROM BD.BCEPAP A, BD.T200_PAIS B
WHERE A.CODPAI = B.CO_PAIS
AND A.CODPAI = '990'
GROUP BY A.CODPAI, B.NO_PAIS
/*ORDER BY 3 DESC*/;
Abs.