GARANTIR DESCONTO

Fórum order by union #38885

22/09/2003

0

Olá amigos! Eu pesquisei nas respostas que tem no forum e vi que tem muitas indicações de como usar order by + union em um select. Só que qdo. eu coloco o order by no meu select ele dá erro! Será que alguém poderia me ajudar? Eu uso IB 6.1. Abaixo está o erro que ele retorna e depois meu ´pequeno´ select...rs...

grata!

****** erro *********
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 31, char -1.
union.


******* select *******
Select m.cod_estab,
m.duplicata,
m.desd,
m.cliente,
m.emissao,
m.vencimento,
m.representante,
m.saldo as valor,
r.razao_social as desc_representante,
u.descricao as desc_estab,
c.razao_social as desc_cliente,
RTRIM(c.cidade_cob)||´ / ´||c.uf_cob
as praca,
´A´ as tipo
from fimovrec m
left join facadrep r on r.codigo = m.representante
left join utcadest u on u.codigo = m.cod_estab
left join facadcli c on c.codigo = m.cliente
left join fiparams p on 0 = 0
where m.cod_estab = :cod_estab and
m.representante >= :codigo_ini and
m.representante <= :codigo_fim and
m.vencimento >= :data_ini and
m.vencimento <= :data_fim and
m.emissao >= p.base_comiss and
m.inclusao <= :data_ref and
m.vencimento > :data_ref and
m.saldo > 0
order by m.representante
union all
Select m.cod_estab,
m.duplicata,
m.desd,
m.cliente,
m.emissao,
m.vencimento,
m.representante,
m.saldo as valor,
r.razao_social as desc_representante,
u.descricao as desc_estab,
c.razao_social as desc_cliente,
RTRIM(c.cidade_cob)||´ / ´||c.uf_cob
as praca,
´V´ as tipo
from fimovrec m
left join facadrep r on r.codigo = m.representante
left join utcadest u on u.codigo = m.cod_estab
left join facadcli c on c.codigo = m.cliente
left join fiparams p on 0 = 0
where m.cod_estab = :cod_estab and
m.representante >= :codigo_ini and
m.representante <= :codigo_fim and
m.vencimento >= :data_ini and
m.vencimento <= :data_fim and
m.emissao >= p.base_comiss and
m.inclusao <= :data_ref and
m.vencimento <= :data_ref and
m.saldo > 0
order by representante
union all
Select m.cod_estab,
m.duplicata,
m.desd,
m.cliente,
m.emissao,
m.vencimento,
m.representante,
CAST((m.valor - m.saldo) as float)
as valor,
r.razao_social as desc_representante,
u.descricao as desc_estab,
c.razao_social as desc_cliente,
RTRIM(c.cidade_cob)||´ / ´||c.uf_cob
as praca,
´R´ as tipo
from fimovrec m
left join facadrep r on r.codigo = m.representante
left join utcadest u on u.codigo = m.cod_estab
left join facadcli c on c.codigo = m.cliente
left join fiparams p on 0 = 0
where m.cod_estab = :cod_estab and
m.representante >= :codigo_ini and
m.representante <= :codigo_fim and
m.vencimento >= :data_ini and
m.vencimento <= :data_fim and
m.emissao >= p.base_comiss and
m.inclusao <= :data_ref and
(m.valor - m.saldo) > 0
order by m.representante


Renata

Renata

Responder

Posts

23/09/2003

Marcio.theis

Entre duas tabelas em uma UNION você somente consegue ordenar a segunda, sugiro que você faça uma view e jogue os dados nela e depois ordene da forma que desejar.


Responder

Gostei + 0

23/09/2003

Vilmardiogo

Na claúsula order by do primeiro select vc colocou assim
Order by m.representante;
Na claúsula order by do segundo select vc colocou assim:
Order by representate;

o ideal é que fique iguais:

Dica de otimização, ao invés disto:

m.representante >= :codigo_ini and
m.representante <= :codigo_fim and
m.vencimento >= :data_ini and
m.vencimento <= :data_fim and

Use assim:
m.representante between :codigo_ini and :codigo_fim and
m.vencimento between :data_Ini and :data_fim

é muito mais rápido ...


Responder

Gostei + 0

24/09/2003

Afarias

a cláusula ORDER BY só pode aparecer 1 vez no *final* de todo o comando SELECT -- ex::

select campo1, campo2 from tabela1
union
select campoA, campoB from tabela2
order by 1


T+


Responder

Gostei + 0

16/11/2004

Michaell

a cláusula ORDER BY só pode aparecer 1 vez no *final* de todo o comando SELECT -- ex:: select campo1, campo2 from tabela1 union select campoA, campoB from tabela2 order by 1 T+


Mas e se minhas tabelas tiverem campos com nomes diferentes? Por exemplo:

SAIDAS (CODIGO INTEGER, DATA TIMESTAMP, QUANTIDADE INTEGER);
ENTRADAS(CODIGO INTEGER, DATA_CADASTRO TIMESTAMP, QUANTIDADE INTEGER);

Supondo que eu queira que o resultado da minha union saia ordenado pela data??

[]´s


Responder

Gostei + 0

16/11/2004

Gandalf.nho

Use o nome do campo no primeiro SELECT ou use números indicando a posição do campo desejado.


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar