Ir para conteúdo
Fórum Script Brasil
  • 0

Dúvida com agrupamento


DaniloLoki

Pergunta

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 para o comentário
Compartilhar em outros sites

9 respostass a esta questão

Posts Recomendados

  • 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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?

_

Editado por DaniloLoki
Link para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...