Jump to content
Fórum Script Brasil
  • 0

Dúvida com agrupamento


DaniloLoki
 Share

Question

Fala ae galera.

To com um probleminha que me deixou meio cego, que é o seguinte:

Um pouco diferente do print abaixo (que é como está meu relatório atualmente), eu gostaria de agrupar o NOME CLIENTE, para conseguir, com NOME CLIENTE repetido, somar apenas 1 em QTD. CLIENTE. Já tentei distinct, mas não tive o resultado esperado (nada aconteceu).

Print Exemplo

Em contra-partida, eu gostaria que, apesar de o NOME CLIENTE se agrupasse (valores iguais), o VALOR fosse somado, e apresentado nesse NOME CLIENTE resultante do agrupamento.

Segue abaixo minha query atual, que funciona da forma do print acima:

Select distinct P.EmpCod, P.EntCod, P.PedVendaNum, P.PedVendaData, P.PedVendaDataENTREGA, P.PedVendaStatDescr, v.VendCod, v.VendNome,p.PedVendaValTotal, P.PedVendaEntNomeDiv,
(select distinct count(Z.PedVendaEntNomeDiv) media from PED_VENDA Z
INNER JOIN VEND_PED_VENDA ZP
on
Z.EMPCOD = ZP.EMPCOD
 and z.PEDVENDADATA >= :Data_inicial
 and     z.PEDVENDADATA <= :Data_final
and    Z.EmpCod = 9
and    Z.PedVendaNum = ZP.PedVendaNum
and    Z.PedVendaStatDescr <> 'NF cancelada'
where ZP.VendCod = VP.VendCod)

From   PED_VENDA P With(NoLock), VEND_PED_VENDA VP With(Nolock), vendedor v with(nolock)

Where  P.EMPCOD = VP.EMPCOD
and    P.EmpCod = 9
and    P.PedVendaNum = VP.PedVendaNum
and    p.PedVendaStatDescr <> 'NF cancelada'
and    v.VendCod = vp.VendCod
 and P.PEDVENDADATA >= :Data_inicial
 and     P.PEDVENDADATA <= :Data_final

group by P.EmpCod, P.EntCod, P.PedVendaNum, P.PedVendaData, P.PedVendaDataENTREGA, P.PedVendaStatDescr, V.VendCod, v.VendNome,p.PedVendaValTotal, vp.VendCod, P.PedVendaEntNomeDiv

order by v.VendNome

Alguém tem alguma idéia?

Link to comment
Share on other sites

9 answers to this question

Recommended Posts

  • 0

Boa tarde Danilo,

Vendo o print q postou, o agrupamento (group by) deveria ser realizado apenas nos campos "Vendedor" e "NomeCliente", e fazendo a soma nos campos "Valor" e "QtdCliente" (que não deve estar no group by).

Da forma que fez, o agrupamento não irá funcionar. Perceba que colocou todos os campos q deseja de retorno na cláusula group by. Fazendo assim, o sql irá agrupar apenas as linhas que tenham informações idênticas em todos os campos ao mesmo tempo. Entendido?

Link to comment
Share on other sites

  • 0
Boa tarde Danilo,

Vendo o print q postou, o agrupamento (group by) deveria ser realizado apenas nos campos "Vendedor" e "NomeCliente", e fazendo a soma nos campos "Valor" e "QtdCliente" (que não deve estar no group by).

Da forma que fez, o agrupamento não irá funcionar. Perceba que colocou todos os campos q deseja de retorno na cláusula group by. Fazendo assim, o sql irá agrupar apenas as linhas que tenham informações idênticas em todos os campos ao mesmo tempo. Entendido?

Bom dia fulvio!

Você poderia dar um exemplo utilizando minha query?

(Desculpa. Trabalho com SQL há pouco tempo, então algumas coisas que podem ser básicas para vocês, são mistérios para mim ainda. Estou me esforçando. rs)

Link to comment
Share on other sites

  • 0

Bom dia Danilo,

Ok, sem problemas... :)

Não sei se vai dar certo (porque não tenho as informações), mas dá pra ter uma idéia:

Select distinct P.EmpCod, 
P.EntCod, 
v.VendCod, 
v.VendNome,
sum(p.PedVendaValTotal) AS Total, 
sum(QtdVenda) QuantidadeVendaTotal,
INNER JOIN VEND_PED_VENDA ZP on Z.EMPCOD = ZP.EMPCOD
and z.PEDVENDADATA >= :Data_inicial
and     z.PEDVENDADATA <= :Data_final
and    Z.EmpCod = 9
and    Z.PedVendaNum = ZP.PedVendaNum
and    Z.PedVendaStatDescr <> 'NF cancelada'
where ZP.VendCod = VP.VendCod)
From   PED_VENDA P With(NoLock), VEND_PED_VENDA VP With(Nolock), vendedor v with(nolock)
Where  P.EMPCOD = VP.EMPCOD
and    P.EmpCod = 9
and    P.PedVendaNum = VP.PedVendaNum
and    p.PedVendaStatDescr <> 'NF cancelada'
and    v.VendCod = vp.VendCod
and P.PEDVENDADATA >= :Data_inicial
and     P.PEDVENDADATA <= :Data_final
group by P.EmpCod, P.EntCod, v.VendCod, v.VendNome
order by v.VendNome

Link to comment
Share on other sites

  • 0
Bom dia Danilo,

Ok, sem problemas... :)

Não sei se vai dar certo (porque não tenho as informações), mas dá pra ter uma idéia:

Select distinct P.EmpCod, 
P.EntCod, 
v.VendCod, 
v.VendNome,
sum(p.PedVendaValTotal) AS Total, 
sum(QtdVenda) QuantidadeVendaTotal,
INNER JOIN VEND_PED_VENDA ZP on Z.EMPCOD = ZP.EMPCOD
and z.PEDVENDADATA >= :Data_inicial
and     z.PEDVENDADATA <= :Data_final
and    Z.EmpCod = 9
and    Z.PedVendaNum = ZP.PedVendaNum
and    Z.PedVendaStatDescr <> 'NF cancelada'
where ZP.VendCod = VP.VendCod)
From   PED_VENDA P With(NoLock), VEND_PED_VENDA VP With(Nolock), vendedor v with(nolock)
Where  P.EMPCOD = VP.EMPCOD
and    P.EmpCod = 9
and    P.PedVendaNum = VP.PedVendaNum
and    p.PedVendaStatDescr <> 'NF cancelada'
and    v.VendCod = vp.VendCod
and P.PEDVENDADATA >= :Data_inicial
and     P.PEDVENDADATA <= :Data_final
group by P.EmpCod, P.EntCod, v.VendCod, v.VendNome
order by v.VendNome

fulvio, está dando erro próximo a palavra INNER. Sinceramente, não consegui encontrar o erro, porque está com todas as vírgulas, tudo certinho...

Está com 2 'where', sem subquery. Isso está correto?

_

Edited by DaniloLoki
Link to comment
Share on other sites

  • 0

Bom dia Danilo,

Desculpa. Esqueci de retirar o resto da subquery que estava no script. Segue:

Select distinct P.EmpCod,
P.EntCod,
v.VendCod,
v.VendNome,
sum(p.PedVendaValTotal) AS Total,
sum(QtdVenda) QuantidadeVendaTotal
From   PED_VENDA P With(NoLock), VEND_PED_VENDA VP With(Nolock), vendedor v with(nolock)
Where  P.EMPCOD = VP.EMPCOD
and    P.EmpCod = 9
and    P.PedVendaNum = VP.PedVendaNum
and    p.PedVendaStatDescr <> 'NF cancelada'
and    v.VendCod = vp.VendCod
and P.PEDVENDADATA >= :Data_inicial
and     P.PEDVENDADATA <= :Data_final
group by P.EmpCod, P.EntCod, v.VendCod, v.VendNome
order by v.VendNome

OBS.: as sintaxes utilizadas do tipo >= : não são padrão sql...

Link to comment
Share on other sites

  • 0
Bom dia Danilo,

Desculpa. Esqueci de retirar o resto da subquery que estava no script. Segue:

Select distinct P.EmpCod,
P.EntCod,
v.VendCod,
v.VendNome,
sum(p.PedVendaValTotal) AS Total,
sum(QtdVenda) QuantidadeVendaTotal
From   PED_VENDA P With(NoLock), VEND_PED_VENDA VP With(Nolock), vendedor v with(nolock)
Where  P.EMPCOD = VP.EMPCOD
and    P.EmpCod = 9
and    P.PedVendaNum = VP.PedVendaNum
and    p.PedVendaStatDescr <> 'NF cancelada'
and    v.VendCod = vp.VendCod
and P.PEDVENDADATA >= :Data_inicial
and     P.PEDVENDADATA <= :Data_final
group by P.EmpCod, P.EntCod, v.VendCod, v.VendNome
order by v.VendNome

OBS.: as sintaxes utilizadas do tipo >= : não são padrão sql...

fulvio, a sintaxe (>=:) é para declarar variáveis no programa ReportX, que eu utilizo para criar esses relatórios.

Deu certinho, como eu preciso. O único problema é que, ao tentar ordenar por nome do valor, ele não sai agrupado. Ele imprime estranho, repetindo o nome dos vendedores e tal. Coisa que não acontece caso eu ordene por nome do vendedor (VendNome).

Alguma ideia meu caro?

Link to comment
Share on other sites

  • 0

Verifique o relacionamento entre as tabelas então. A ordenação não altera o resultSet. Se ordenar por qualquer campo, o resultado final terá que ser exatamente igual. Apenas a ordem irá alterar.

Faça os testes com o total de linhas de retorno.

Link to comment
Share on other sites

  • 0

Sim está corretíssimo!!! rs.

O problema é que você está dizendo que quando altera o order by, os dados são alterados do resultado. Isto não tem como acontecer, porque o order by apenas ordena....

Acho q estamos falando da mesma coisa... :)

Se preferir, posta um exemplo ai.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share



  • Forum Statistics

    • Total Topics
      150.9k
    • Total Posts
      648.7k
×
×
  • Create New...