Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Linked

Agrupar, somar por quantidade e valor na mesma consulta

Recommended Posts

Olá pessoal,

 

Vejam a tabela abaixo:

 

Categoria Vencimento Valor CadastradoEm
========= ========== ===== ============
A 01/01/2015 10,00 01/01/2015
A 01/02/2015 10,00 01/01/2015
A 01/03/2015 10,00 01/01/2015
B 01/02/2015 30,00 01/02/2015
C 01/01/2015 15,00 01/01/2015
C 01/01/2015 15,00 01/01/2015

 

Se for possível, eu gostaria que uma consulta me retornasse a quantidade de itens no campo [Categoria], e ao mesmo tempo somasse o valor total por Categoria. Tudo isso por intervalo de datas a partir do campo [CadastradoEm], exemplo: 01/01/2015 a 28/02/2015.

 

Com base na tabela acima, essa consulta retornaria os seguintes dados:

 

Categoria Quantidade Valor Total

======== ========= =========

A 03 30,00

B 01 30,00

C 02 30,00

 

 

Abraços

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se for possível, eu gostaria que uma consulta me retornasse a quantidade de itens no campo [Categoria], e ao mesmo tempo somasse o valor total por Categoria. Tudo isso por intervalo de datas a partir do campo [CadastradoEm], exemplo: 01/01/2015 a 28/02/2015.

 

Além da clausula GROUP BY, citada anteriormente por Motta, você necessitará das funções Count() e Sum(), além da cláusula WHERE.

 

A sugestão abaixo considera que na coluna CadastradoEm somente existe data, sem horário.

-- código 1
declare @DataInicial datetime, @DataFinal datetime;
set @DataInicial= Convert(datetime, '1/1/2015', 103);
set @DataFinal= Convert(datetime, '28/2/2015', 103);

SELECT Categoria, 
       Quantidade= Count(Categoria),
       [Valor Total]= Sum(Valor)
  from tabela
  where CadastradoEm between @DataInicial and @DataFinal
  group by Categoria;

_____

linkedin.gif José Diz Belo Horizonte, MG - Brasil

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Além da clausula GROUP BY, citada anteriormente por Motta, você necessitará das funções Count() e Sum(), além da cláusula WHERE.

 

A sugestão abaixo considera que na coluna CadastradoEm somente existe data, sem horário.

-- código 1
declare @DataInicial datetime, @DataFinal datetime;
set @DataInicial= Convert(datetime, '1/1/2015', 103);
set @DataFinal= Convert(datetime, '28/2/2015', 103);

SELECT Categoria, 
       Quantidade= Count(Categoria),
       [Valor Total]= Sum(Valor)
  from tabela
  where CadastradoEm between @DataInicial and @DataFinal
  group by Categoria;

_____

linkedin.gif José Diz Belo Horizonte, MG - Brasil

 

Bom dia pessoal,

 

Em primeiro lugar gostaria de pedir desculpas a vocês, devido eu ter me enganado na formulação da minha pergunta. Vou reformula-la abaixo.

 

Considerem a seguinte tabela:

 

 

Cliente Protocolo Parcela Cadastro Valor

======== ========= ====== ========= =====

A 0001 01 01/01/2015 5,00

A 0001 02 01/02/2015 5,00

A 0001 03 02/02/2015 10,00

A 0002 01 03/02/2015 5,00

 

B 0003 01 02/02/2015 20,00

B 0003 02 02/03/2015 10,00

 

C 0004 01 01/01/2015 5,000

 

De acordo com a tabela acima e com base no campo [Cadastro] que deverá filtrar pelo intervalo 01/01/2015 a 31/03/2015, o resultado da consulta deverá retornar o seguinte:

 

 

Cliente Total Protocolos Valor Total

======== ============= =========

A 2 25,00

B 1 30,00

C 1 5,00

 

 

Portanto, a minha consulta somará a quantidade de PROTOCOLOS por cliente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Portanto, a minha consulta somará a quantidade de PROTOCOLOS por cliente.

 

No código 1 substitua a linha 7 de

Quantidade= Count(Categoria),

por

[Total protocolos]= Count(distinct Protocolo),

 

Além disso, substitua toda ocorrência de "Categoria" por "Cliente".

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ficaria assim:

-- código 1 v2
declare @DataInicial datetime, @DataFinal datetime;
set @DataInicial= Convert(datetime, '1/1/2015', 103);
set @DataFinal= Convert(datetime, '28/2/2015', 103);
     
SELECT Cliente,
    [Total protocolos]= Count(distinct Protocolo),
    [Valor Total]= Sum(Valor)
    from tabela
    where CadastradoEm between @DataInicial and @DataFinal
    group by Cliente;

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Ficaria assim:

-- código 1 v2
declare @DataInicial datetime, @DataFinal datetime;
set @DataInicial= Convert(datetime, '1/1/2015', 103);
set @DataFinal= Convert(datetime, '28/2/2015', 103);
     
SELECT Cliente,
    [Total protocolos]= Count(distinct Protocolo),
    [Valor Total]= Sum(Valor)
    from tabela
    where CadastradoEm between @DataInicial and @DataFinal
    group by Cliente;

 

Ótimo exemplo JoseDR, funcionou perfeitamente!!!

 

Muito obrigado meu amigo.

 

Fique na paz!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.