[firebase-br] Order by com case when end
Denis Pereira Raymundo
denisuba em gmail.com
Qua Mar 14 14:08:40 -03 2012
tentou assim?
SELECT
T.IDTESTE,
T.DESCRICAO,
CASE :ORDEM
WHEN 'I' THEN T.IDTESTE
WHEN 'V' THEN T.DESCRICAO
END ordem
FROM
TESTE T
ORDER BY 3
"Edson Marco" escreveu na notícia da
mensagem:CAK01zFqFzuOX7Ct=9c9tqha176iuf1557BgaP9nD5NGrmSLxjw em mail.gmail.com...
Trabalhan com uma procedure, onde o campo a que vai ser ordenado o
resultado da consulta é enviado via paramentro.
select * from stpbuscateste('I")
Nesta procedure eu tenho a seguinte consulta:
SELECT
T.IDTESTE,
T.DESCRICAO
FROM
TESTE T
ORDER BY
CASE :ORDEM
WHEN 'I' THEN T.IDTESTE
WHEN 'V' THEN T.DESCRICAO
END
Para o teste estou utilizando "I" para inteiro e "V" para texto
Para a tabela com os seguintes dados:
IDTESTE DESCRICAO
1 ARROZ
2 FEIJÃO
3 BATATA
10 PICANHA
11 ALCATRA
12 COSTELA
20 LIMÃO
21 LARANJA
22 ABACATE
Então na consulta para o campo inteiro (IDTESTE) a ordenação é executada
como se ele fosse um campo texto retornando:
IDTESTE DESCRICAO
1 ARROZ
10 PICANHA
11 ALCATRA
12 COSTELA
2 FEIJÃO
20 LIMÃO
21 LARANJA
22 ABACATE
3 BATATA
Tentei forçar com cast a ordenação mas o resultado é o mesmo.
Abaixo envio o script para criação do ambiente de teste que eu criei, caso
alguém queira tentar reproduzir.
CREATE TABLE TESTE (
IDTESTE INTEGER NOT NULL,
DESCRICAO VARCHAR(32)
);
ALTER TABLE TESTE ADD CONSTRAINT PK_TESTE PRIMARY KEY (IDTESTE);
CREATE PROCEDURE STPBUSCATESTE (
ORDEM CHAR(1)
) RETURNS (
IDTESTE INTEGER,
DESCRICAO VARCHAR(32)
)
AS
BEGIN
FOR
SELECT
T.IDTESTE,
T.DESCRICAO
FROM
TESTE T
ORDER BY
CASE :ORDEM
WHEN 'I' THEN T.IDTESTE
WHEN 'V' THEN T.DESCRICAO
END
INTO
:IDTESTE,
:DESCRICAO
DO
BEGIN
SUSPEND;
END
END
Obrigado
--
/*
* Edson Marco Ferrari Junior
* edmafer em edmafer.com.br
* http://www.edmafer.com.br
*/
______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
Para saber como gerenciar/excluir seu cadastro na lista, use:
http://www.firebase.com.br/fb/artigo.php?id=1107
Para consultar mensagens antigas: http://firebase.com.br/pesquisa
Mais detalhes sobre a lista de discussão lista