Criando uma soma cumulativa com o banco SQL utilizando apenas uma Consulta.

Para criar um somatório acumulado de um campo da tabela, pode-se configurar uma Consulta utilizando o comando Inner Join do SQL.

Exemplo:

Data/Hora Campo Acumulado
20/02/2014 09:54:05 1 1
20/02/2014 09:54:15 3 4
20/02/2014 09:54:35 5 9
20/02/2014 10:03:58 1 10

Para calcular este valor acumulado, é preciso definir duas variáveis para a mesma tabela: uma para os campos da tabela e outra para o somatório. Por mais que ambas as variáveis façam referência à mesma tabela, o SQL as trata como se fossem duas tabelas diferentes.

No SQL exemplo abaixo, foram definidas as variáveis t1 para os campos e t2 para o somatório.

SELECT t1.E3TimeStamp,t1.Campo, SUM(T2.Campo) as Soma
FROM Somatorio AS t1
INNER JOIN Somatorio AS t2 on t1.E3TimeStamp >= t2.E3TimeStamp
GROUP BY  t1.E3TimeStamp,t1.Campo
ORDER BY t1.E3TimeStamp  ASC

A função Inner Join une as duas tabelas para que o somatório apareça junto aos registros da tabela principal.

Anexos:

ProjetoSomatorio.rar

Este artigo foi útil? Was this post helpful?
Yes11
No17

Thoughts on “Criando uma soma cumulativa com o banco SQL utilizando apenas uma Consulta.

  1. E se eu quiser somar o campo do E3TimeStamp,. Por exemplo, quero somar o tempo em min e segundos da Coluna E3TimeStamp é possível ? ou o tratamento dos dados são diferentes?

  2. Ola eu tenho uma tabela que mostra extrato de ligações de um cliente. Até 100 minutos n pode cobrar nada após os 100 minutos tem que cobrar 15 centavos por minuto. Queria ver uma forma de ele pegar as ligações e joga valor 0 nas ligações até 100 minutos e jogar o valor de 15 assim q passar os 100 minutos.

    1. Se você precisa apenas inserir o valor 0 na coluna que possui valores até 100, e 15 (ou 0.15) nos demais registros, uma sugestão seria a seguinte:

      Access:
      SELECT t1.E3TimeStamp,t1.Campo, SUM(T2.Campo) as Soma, IIf(SUM(T2.Campo) > 100, 0.15, 0) as Valor
      FROM Somatorio AS t1
      INNER JOIN Somatorio AS t2 on t1.E3TimeStamp >= t2.E3TimeStamp
      GROUP BY t1.E3TimeStamp,t1.Campo
      ORDER BY t1.E3TimeStamp ASC

      SQL:
      SELECT SUM(T2.Campo), CASE WHEN (SUM(T2.Campo)) > 100 THEN 0.15 ELSE 0 END
      FROM Nivel AS t1
      INNER JOIN Nivel AS t2 on t1.E3TimeStamp >= t2.E3TimeStamp
      GROUP BY t1.E3TimeStamp,t1.Campo
      ORDER BY t1.E3TimeStamp ASC

  3. Na minha tabela, eu tenho uma condição, se for FALSO, eu preciso reiniciar a contagem, tentei fazer com o case when, mas não deu muito certo.

Leave a Reply

Your email address will not be published.Required fields are marked *