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

Responder a