Valeu pela dica ... vou testar ... obrigado !!! Fabiano Chiqueti escreveu: > /* > Daê Thiago > > Abaixo uma possível solução para o seu problema, desenvolvida > utilizando o padrão POG: > > */ > -- Tabelinha de teste > create table teste(id serial, descricao text, valor decimal(8,2)); > > -- View auxiliar para definir tipo de retorno da função (chuncho) > create view teste_view as select *, null::char(1) from teste; > > -- Função pra popular a tabelinha teste (chuncho de teste) > CREATE OR REPLACE FUNCTION public.popula_teste() > RETURNS boolean AS > $BODY$ > DECLARE > contador integer; > BEGIN > contador := 1; > for contador in 0..200 > loop > insert into teste values(contador,'desc '||contador::varchar, > contador*10::decimal); > end loop; > > RETURN true; > EXCEPTION > WHEN OTHERS THEN > END; > $BODY$ > LANGUAGE 'plpgsql' VOLATILE > COST 100; > > -- Popula a tabelinha teste com a função (gambiarra básica... ) > select popula_teste(); > > -- Cria função que retorna os 100 primeiros registros da tabela teste > -- onde os 25 primeiros terão o atributo classe = A, os 25 seguintes = B, > etc... > CREATE OR REPLACE FUNCTION public.select_classific() > RETURNS SETOF teste_view AS > $BODY$ > DECLARE > contador smallint; > classe char(1); > registro teste_view%rowtype; > BEGIN > for contador in 0..3 loop > classe := (case > when contador = 0 then 'A' > when contador = 1 then 'B' > when contador = 2 then 'C' > else 'D' > end); > for registro in > select id, descricao,valor,classe > from teste > order by valor desc > limit 25 offset 25*contador > loop > RETURN NEXT registro; > end loop; > end loop; > RETURN; > EXCEPTION > WHEN OTHERS THEN > END; > $BODY$ LANGUAGE 'plpgsql'; > > > -- Utilização da função > select * from public.select_classific() ; > > -- :p > > /* > > Apesar de ser uma solução POG, utilizo coisa semelhante aqui na nossa > empresa e tem funcionado bem... > > Abrç > > Chiqueti > > */ > > 2009/8/17 Thiago <[email protected]>: >> Galera, bom dia. >> >> Seguinte estou precisando fazer um select em uma base de produtos onde >> vou encontrar as curvas de vendas dos produtos, ou seja, tenho um select >> que me retorna 100 itens quero que para os 25% que listarem primeiro me >> mostre A, para os próximos 25% mostre B e na sequencia C e D. >> >> Pensei em fazer manualmente utilizando algum tipo de paginação, tipo, >> faço um select com limit 25 por exemplo (essa conta vou ter que fazer na >> mão) e tipo em um outro select listo mais 25 mas mostrando a partir do 26. >> >> Existe como fazer isso? >> >> Obrigado! >> >> _______________________________________________ >> pgbr-geral mailing list >> [email protected] >> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral >> > _______________________________________________ > pgbr-geral mailing list > [email protected] > https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral >
_______________________________________________ pgbr-geral mailing list [email protected] https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
