/*
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