[Resolvido] Order By de acordo com parâmetro no iReport

Boa tarde.
Procurei nos tópicos e não achei nada para me ajudar.
Tenho um relatório no iReport, onde tem um parâmetro em que o usuário diz por qual data que ele vai filtrar: pela Data da Fatura ou pela Data do Pedido.
Pensei em colocar no parâmetro algo assim (no campo Default Value Expression):

($P{OrdernarPor}.equals("PRO") ? DatePromised: ($P{OrdernarPor}.equals("PED") ? DateOrdered : ""))
e dai na SQL do relatório no Order By:

Mas ele não deu certo, da erro na expressão quando vou executar. Se vou colocar a expressão entre aspas (“DatePromised”) não filtra.
Alguém consegue me ajudar??

Obrigada :smiley:

Ninguém? :cry:

Já tentou utilizar um Integer para ordenar ao invés de utilizar o nome do campo?
Exemplo:

Select
nome,
dataNasc,
endereco
from
pessoa
order by 2

Neste exemplo ele ordena por dataNasc

Se você passar um parâmetro tipo integer ele deverá funcionar.

Esqueça o que eu falei na resposta anterior. Testei no Sybase e dá erro dizendo que não são permitidas variáveis ou parâmetros na cláusula order by. Eu estou com o mesmo problema e a única solução que encontrei por enquanto é a seguinte:

Eu mando o parâmetro para a sql.
Se for 2 eu executo uma sql fazendo ordenação pelo campo 2. Se for 3 eu executo uma outra sql e assim por diante. É claro que esta é uma prática totalmente condenável. Ex:

declare @ordenarPor integer
set @ordenarPor = $P{ordenarPor}
if(@ordenarPor = 2)
begin

select ordenando pelo campo 2 da consulta…

end else
begin

select ordenando pelo campo 3 da consulta…

end

[quote=Edson de Almeida]Já tentou utilizar um Integer para ordenar ao invés de utilizar o nome do campo?
Exemplo:

Select
nome,
dataNasc,
endereco
from
pessoa
order by 2

Neste exemplo ele ordena por dataNasc

Se você passar um parâmetro tipo integer ele deverá funcionar.[/quote]

Bom dia.
Na SQL funciona beleza.
Mas no iReport, ele não ordena.
Deve ser isso que você falou de não aceitar parâmetro no Order By. Ele não da erro, mas simplesmente não ordena.
Acho que vou ter que fazer dois relatórios diferentes… :frowning:

1 curtida

[quote=catia.alessandra]
Bom dia.
Na SQL funciona beleza.
Mas no iReport, ele não ordena.
Deve ser isso que você falou de não aceitar parâmetro no Order By. Ele não da erro, mas simplesmente não ordena.
Acho que vou ter que fazer dois relatórios diferentes… :frowning: [/quote]

Funcionou. Coloquei $P!{OrdernarPor} e funcionou, passando um parâmetro Integer do nº da coluna. É meio que uma gambiarra, mas melhor que fazer um Case When no Order By…

Obrigada pela ajuda.

1 curtida

Oi amigos, obrigado por este post! apesar de antigo salvou meu trabalho aqui…

Agora só mais uma dúvida…

Digamos que eu queira, além de ordenar por um parâmetro só, ordenar um relatório por dois parâmetros: nome e data de nascimento

Na lógica terei que criar dois parâmetros…

Mas como fica a sql quando optar por um parâmetro só… o outro fica nulo???

Obs: Tentei passa dois números num parâmetro só, sem sucesso… fiz 1 , 2 e nada…