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