Fórum Procedure para organizar valores por ordem venda #364838
09/10/2008
0
Talvez até já tenha discutido sobre esse assunto, mas não me dou muito bem na pesquisa desse fórum.
Bem, estou querendo fazer uma procedure que me devolvesse o seguinte, a venda dos vendedores por fornecedor com os 5 fornecedores mais vendidos e outra coluna informando o restante da venda dos outros fornecedores.
Dados do sistema
FORNECEDOR VALOR AAA R$ 200,00 BBB R$ 1250,00 CCC R$ 216,00 DDD R$ 5250,00 EEE R$ 2600,00 FFF R$ 6200,00 GGG R$ 150,00 HHH R$ 652,00
No meu resultado ficaria assim:
FORNECEDOR VALOR FFF R$ 6200,00 DDD R$ 5250,00 EEE R$ 2600,00 BBB R$ 1250,00 HHH R$ 652,00 OUTROS R$ 566,00
Não sei se fui claro.
Se precisar de mais detalhes e só postar quais detalhes precisa.
[b:7c18ec4614]ps. Coloquei 5 primeiros, mas na verdade preciso é dos 9 primeiros, sendo que atualmente a empresa conta com mais de 15 fornecedores [/b:7c18ec4614]
Digitom
Curtir tópico
+ 0Posts
09/10/2008
Diegotiemann
Select first 9 nome_forncedor valor_venda from ....order by valor_venda desc union select ´Outros´ , Sum(valor_venda) from ... where fornecedor not in (select first 9 fornecedor .......)
Resolveria, é só adaptar pras suas tabelas mas vai ficar lento.
Gostei + 0
10/10/2008
Digitom
Veja só como é meu banco de dados:
TABELA (Campos)
FORNECEDOR (CODFOR - NOMEFOR)
PRODUTOS (CODPRO - NOMEPRODUTO - CODFOR)
NFSAIDA (NFNUMNOTA - NFVENDCOD - CODCLI - NFEMISSAO)
ITENSNOTAFISCAL (NUMNOTA - CODCLI - CODPRO - VALORVENDA - QUANTIDADE)
VENDEDORES (VENDCOD - VENDNOME)
Então pensei em fazer o seguinte:
Criar uma procedure para percorrer o cadastro de vendedor, e depois percorrer o cadastro de NFSAIDA juntamente com os ITENS para saber se existe venda do determinado fornecedor.
Gostei + 0
10/10/2008
Emerson Nascimento
Gostei + 0
10/10/2008
Digitom
Gostei + 0
10/10/2008
Emerson Nascimento
crie uma SP assim:
CREATE PROCEDURE VENDA_POR_FORNECEDOR ( listar integer) returns ( id_fornecedor integer, nomefornecedor varchar(60), valor float ) as declare variable isql varchar(255); -- instrução sql declare variable ifor varchar(255); -- lista de fornecedores begin listar = coalesce(listar, 0); if (listar < 0) then listar = 0; if (listar = 0) then begin select ´TODOS´, sum(it.valorvenda * it.quantidade) from itensnotafiscal into :nomefornecedor, :valor; id_fornecedor = -1; end else begin isql = ´select first ´ || cast(:listar as varchar(5)) || ´ f.codfor, f.nomefor,´ || ´ sum(it.valorvenda * it.quantidade)´ || ´from itensnotafiscal it´ || ´ inner join produtos p on (p.codpro = it.codpro)´ || ´ inner join fornecedor f on (f.codfor = p.codfor)´ || ´ group by f.codfor, f.nomefor´ || ´ order by 3 desc ´; ifor = ´´; for execute statement isql into :id_fornecedor, :nomefornecedor, :valor do begin if (ifor <> ´´) then ifor = ifor || ´,´; ifor = ifor || cast(:id_fornecedor as varchar(10)); suspend; end isql = ´select ´´OUTROS´´, sum(it.valorvenda * it.quantidade) ´ || ´from itensnotafiscal it ´ || ´inner join produtos p on (p.codpro = it.codpro) ´ || ´where not p.codfor in (´ || ifor || ´)´; execute statement isql into :nomefornecedor, :valor; id_fornecedor = -1; end suspend; end
e execute um select como se fosse uma tabela normal:
select * from venda_por_fornecedor(5) -- lista os 5 maiores e consolida os demais
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)