Em 6 de janeiro de 2015 22:19, Marcelo Florindo <marceloflori...@gmail.com>
escreveu:

> Boa noite colegas,
>
> Eu tenho este sql:
>
> ​​
> Select * from fabricante where id in (10,14,29,49,20)
>
> Preciso que o select venha na mesma ordem do in, alguma ideia?
>
>
> ​Crie uma função que faça a ordenação:

CREATE OR REPLACE FUNCTION fordenacao(vfield text,vin text) RETURNS text AS
$$
DECLARE
vorder integer DEFAULT 1;
vindice integer;
vcodigo integer[] DEFAULT string_to_array(vin,',')::integer[];
vordenacao text DEFAULT '';
BEGIN
FOR vindice IN array_lower(vcodigo,1)..array_upper(vcodigo,1) LOOP
vordenacao := vordenacao||' WHEN '||vcodigo[vindice]::text||' THEN
'||vorder::text;
vorder := vorder + 1;
END LOOP;
vordenacao := '(CASE '||vfield||' '||vordenacao||' END)';
RETURN vordenacao;
END;
$$
LANGUAGE plpgsql;

​
Select * from fabricante where id in (10,14,29,49,20) ORDER BY
fordenacao('id','10,14,29,49,20')
​

Não sei dizer se é a melhor solução...​mas vale a ajuda. Não esqueça de
analisar a performance...

[]s
Danilo
_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a