Pesquisa Sql

Firebird

16/03/2006

Por favor,

Alguém poderia me ajudar na seguinte questão:

Preciso criar uma consulta no banco de dados onde eu leia todas as vendas de todos os vendedores e calcule a comissão deles. Até ai Ok. só que nesta consulta eu tenho que agrupar por vendedor exibindo o total de cada um no período.

Alguém poderia me ajudar.


Delphijr

Delphijr

Curtidas 0

Respostas

Martins

Martins

16/03/2006

Por favor, Alguém poderia me ajudar na seguinte questão: Preciso criar uma consulta no banco de dados onde eu leia todas as vendas de todos os vendedores e calcule a comissão deles. Até ai Ok. só que nesta consulta eu tenho que agrupar por vendedor exibindo o total de cada um no período. Alguém poderia me ajudar.


vai precisar da clausula Group By, mas primeiramente vc poderia postar o q já tem pronto, outra coisa muito importante é sempre que solicitar ajuda aqui no fórum indicar o banco de dados q está usando e se possível postar a DDL de sua tabela, para q possamos ter uma noção da estrutura da mesma e assim oferecermos uma solução mais próxima da necessitada por vc. Obrigado


GOSTEI 0
Delphijr

Delphijr

16/03/2006

Me perdoem, é a falta de experiência.

Eu utilizo como componente de acesso ao firebird o Dbexpress. As linhas abaixo representa a minha realidade hoje. Mas não atende as minhas necessidades. Me ajudem.

SELECT PROFISSIONAIS.nomeprof,Item_venda.vl_unit,servico.comserv,ITEM_VENDA.DATA FROM PROFissionais, item_venda,SERVICO
WHERE item_venda.codprof = profissionais.codprof AND
ITEM_VENDA.codSERV = SERVICO.CODSERV AND
ITEM_VENDA.DATA between :DTINI AND :DTFIM AND
SERVICO.COMSERV > 0
order by profissionais.nomeprof


GOSTEI 0
Emerson Nascimento

Emerson Nascimento

16/03/2006

tente assim:
select
  pfs.codprof codigo,
  pfs.nomeprof nome,
  itv.codserv,
  sum(itv.vl_unit * itv.quant) vendatotal,
  max(srv.comserv) percentualcomissao,
  sum(itv.vl_unit * itv.quant) * (max(srv.comserv) / 100) valorcomissao
from
  profissionais pfs
inner join
  item_venda itv on (itv.codprof = pfs.codprof)
inner join
  servico srv on (srv.codserv = itv.codserv and srv.comserv > 0)
where
  itv.data between :DTINI AND :DTFIM
group by
  pfs.codprof,
  pfs.nomeprof,
  itv.codserv
order by
  pfs.nomeprof, pfs.codprof

note que, se os campos numéricos contiverem algum valor NULL, o resultado pode não ser o esperado. para evitar esse tipo de problema, utilize a função coalesce(), introduzida a partir do firebird 1.5
select
  pfs.codprof codigo,
  pfs.nomeprof nome,
  sum(coalesce(itv.vl_unit,0) * coalesce(itv.quant,1)) vendatotal,
  isnull(max(srv.comserv),0) percentualcomissao,
  sum(coalesce(itv.vl_unit,0) * coalesce(itv.quant,1)) *
    (isnull(max(srv.comserv),0) / 100) valorcomissao
from
  profissionais pfs
inner join
  item_venda itv on (itv.codprof = pfs.codprof)
inner join
  servico srv on (srv.codserv = itv.codserv and coalesce(srv.comserv,0) > 0)
where
  itv.data between :DTINI AND :DTFIM
group by
  pfs.codprof,
  pfs.nomeprof,
  itv.codserv
order by
  pfs.nomeprof, pfs.codprof

no exemplo apresentado, o resultado será totalizado por vendedor e tipo de serviço.

espero que seja isso de que precisa...


GOSTEI 0
POSTAR