Fórum Erro estranho em Order num select #31429
16/03/2010
0
Utilizo o seguinte select no ibexpert por exemplo e o mesmo funciona perfeitamente:
select movestoque.codmest, movestoque.datmov, movestoque.numnf, tipomov.nommov as nommov, case tipomov.vinculo when 0 then clientes.nomcli when 1 then fornecedor.nomfor when 2 then empresas.nomemp end as destino, case when (tipomov.vinculo=2) and (enviado=0) then 'Sim' when (tipomov.vinculo=2) and (enviado=1) then 'Nao' else ' ' end as enviado from movestoque left join tipomov on tipomov.codmov =movestoque.codmov left join clientes on clientes.codcli =movestoque.codcli left join empresas on empresas.codemp =movestoque.codemp left join fornecedor on fornecedor.codfor=movestoque.codfor where DESTINO like :nomeproc order by DESTINO
Peguei esse select já em tempo de execução do meu sistema. No ib como mencionei, funciona ordem pelo CAMPO DESTINO corretamente, mas pelo meu sistema, diz que o CAMPO DESTINO não existe para ordenar.
Erro: Column unknown DESTINO
Alguma idéia do possa ser?
att
mario
Mario Inacio
Curtir tópico
+ 0Posts
16/03/2010
Wilson Junior
Utilize
ORDERBY 5 /* índice da coluna Destino */
Espero ter colaborado.
Gostei + 0
16/03/2010
Thiago Santana
Ao invés de utilizar o nome do campo utilize o seu indice...
A ordem em que ele está sendo selecionado!
Tipo
SELECT NOME, ENDERECO, CIDADE FROM DADOS; Se vc kiser ordenar pela cidade utilize
ORDER BY 3; Espero ter ajudado!
Abraçoo
Gostei + 0
16/03/2010
Wilson Junior
Espero ter colaborado.
Gostei + 0
18/03/2010
Mario Inacio
O order funciona sem problema.
O erro ocorre quando tento filtrar pela coluna gerada através de CASE.
select codcli, nomcli, case when codcli < 100 then 'MENOR' else 'MAIOR' end as TESTE from clientes where TESTE = 'MENOR' order by TESTE
Nesse exemplo, diz que a coluna TESTE não existe para procura.
Se retirar a parte WHERE ordena sem problemas, mas preciso fazer uma procura em cima da coluna gerada.
Sabem alguma colução
Segue uma imagem, mostrando a ocorrência.
att
Gostei + 0
18/03/2010
Emerson Nascimento
Gostei + 0
18/03/2010
Mario Inacio
esse select fiz apenas para ilustrar a situação.
Realmente preciso filtrar por um campo assim.
Um exemplo prático seria:
select codcli,doc,pa, case situacao when 0 then 'TESTANDO' when 1 then 'TESTADO' when 2 then 'TESTE' end as situa from areceber where situa = 'TEST'
Em minhas telas de procura, a medida que o cliente vai digitando o sistema vai filtrando através de LIKE.
Nesse caso, o cliente digitaria TEST e selecionaria tudo, se digitasse TESTE somente os dois primeiros casos.
Entendeu a lógica?
Gostei + 0
15/06/2010
Mario Inacio
Sigo com o problema de procura e order com campo
gerado conforme determinadas condições dos registros.
Um caso bem particular e necessário é um select em que
analiso se o débito está vencido a XX dias, coloco uma condição,
se for por outro período coloco outra condição.
E isso vai se alterando diariamente, dependendo da data atual,
ele vai se alterando.
Exemplo:
select
nomecliente,
case
when coalesce((select sum(valdoc) from areceber
where quitado=1 and areceber.codcli=clientes.codcli),0) = 0 then ''Normal'''
when coalesce((select sum(valdoc) from areceber
where quitado=1 and areceber.codcli=clientes.codcli and
areceber.datven < current_date),0) > 0 then ''Vencido'''
else
''Em aberto''
end as situacao
from clientes
Aguardo uma idéia, obrigado
Gostei + 0
15/06/2010
Km Sistemas
Desta forma:
select codcli,doc,pa,(select SITU FROM (SELECT 'TESTANDO' WHERE situacao = 0 union all SELECT 'TESTADO' WHERE situacao = 1 union all SELECT 'TESTE' WHERE situacao = 2)) as situafrom areceberwhere situa = 'TEST'
Gostei + 0
16/06/2010
Mario Inacio
tentei executar pelo ib mas retornou o erro:
Invalid token. Dynamic SQL Error. SQL error code = -104. Token unknown - line 4, column 17. WHERE.
Obrigado
Gostei + 0
17/06/2010
Carlos Mazzi
Gostei + 0
17/06/2010
Mario Inacio
está faltando sim, mas foi uma colocação do amigo Farinha,
e estou aguardando uma resposta dele.
Não consegui entender o comando.
Gostei + 0
17/06/2010
William Galleti
Select CodCli, Doc, Pa, Situa From ( select codcli,doc,pa,
case situacao when 0 then 'TESTANDO'
when 1 then 'TESTADO'
when 2 then 'TESTE'
end as situa
from areceber
where situa = 'TEST') Order By Situa
Dependendo do tamanho do Select vc nem vai perder desempenho.
Gostei + 0
17/06/2010
Emerson Nascimento
tente algo como:
select * from
(select
codcli,doc,pa,
case situacao
when 0 then 'TESTANDO'
when 1 then 'TESTADO'
when 2 then 'TESTE'
end as situa
from
areceber) tab
where situa like 'TEST%'
esta sintaxe funciona no SQL SERVER, mas me parece que também funciona nas versões mais novas do Firebird.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)