Jump to content
Fórum Script Brasil
  • 0

(Resolvido) somar valores entre datas SQL


Vinicius Schuh

Question

Boa tarde a todos, sou iniciante no fóum e no uso de comandos SQL, estou utilizando o seguinte comando:

SELECT SUM(ValorDoDocumento + Juros - Descontos) AS Valor_Total, DataDoPagamento

FROM dbo.[Duplicatas a Receber Pagas]

GROUP BY DataDoPagamento;

Este comando me retornar o total dos valores de cada dia, se eu tiver tres pagamentos para o dia 04/10/2011 ira me mostrar apenas um registro correspondente a este dia com a soma total dos tres pagamentos, e assim sucessivamente.

O que eu realmente preciso é que ele me retorne a soma de tais pagamentos separados por mês e não dessa forma que esta sendo exibida por dia.

o motivo de eu precisar de tal informação é que estou desenvolvendo um relatório de contas a receber pagas sintético, e preciso saber o total do mes de janeiro, fevereiro e etc. de acordo com o periodo que o usuário ira selecionar.

desde já agradeço e fico no aguardo da ajuda de vc's, caros.

abraço a todos.

Link to comment
Share on other sites

8 answers to this question

Recommended Posts

  • 0

Boa tarde Vinicius,

O resultado está retornando apenas uma data por causa do GROUP BY DataDoPagamento. Se as datas forem exatemente iguais, o sql as agrupará. Caso queira que retorne separado, terá q tirar o agrupamento ou modificar as datas (pode ser colocando segundos diferentes, por exemplo). Se retirar o agrupamento, terá que refazer o cálculo utilizado no SUM.... :.(

Link to comment
Share on other sites

  • 0

Boa tarde Vinicius,

Desculpe, não tinha entendido corretamente o problema.

Agora entendi... rs. Desta forma poderá realizar uma conversão da data, agrupando ao invés pela data, pelo mês. Segue um exemplo pra entender melhor:

CREATE TABLE #teste (valor INT, date DATETIME)

INSERT INTO #teste VALUES (3, getdate())
INSERT INTO #teste VALUES (2, getdate())

-- Assim não vai dar
SELECT SUM(valor) FROM #teste t GROUP BY date

-- Assim vai dar
SELECT SUM(valor) FROM #teste t GROUP BY substring(CONVERT(VARCHAR(10), date, 103), 4, 2)

Link to comment
Share on other sites

  • 0

Boa Tarde, perdoe a minha falta de explicação na postagem anterior, continuo com o problema, fiz com os procedimentos que me passou e me retorna um erro que o campo DataDoPagamento que seria o campo na minha tabela não esta agregada a função GROUP BY

Segue código, pois talvez seja apenas um erro de interpretação da minha parte:

SELECT     SUM(ValorDoDocumento + Juros - Descontos) AS Valor_Total, DataDoPagamento
FROM         dbo.[Duplicatas a Receber Pagas]
t GROUP BY substring(CONVERT(VARCHAR(10), DataDoPagamento, 103), 4, 2)

Link to comment
Share on other sites

  • 0

Boa tarde Vinicius,

O sql é um pouco "chato" quanto a isto mesmo... rs.

Perceba que manipulamos os dados de data no group by. Após o select você coloca o campo de retorno Valor_Total e DataDoPagamento. Mas o campo DataDoPagamento não é o mesmo do campo que manipulamos no group by.

Resumindo: se manipular o campo no group by, terá que manipular o campo depois do select.

No meu exemplo funcionou porque não coloquei o campo Date como retorno. Segue um exemplo para entendimento:

CREATE TABLE #teste (valor INT, date DATETIME)

INSERT INTO #teste VALUES (3, getdate())
INSERT INTO #teste VALUES (2, getdate())

-- Assim não vai dar
SELECT SUM(valor), date FROM #teste t GROUP BY date

-- Assim também não vai dar, porque o campo do group by não é o mesmo do de retorno
SELECT SUM(valor), date FROM #teste t GROUP BY substring(CONVERT(VARCHAR(10), date, 103), 4, 2)

-- Assim vai dar
SELECT SUM(valor), substring(CONVERT(VARCHAR(10), date, 103), 4, 2)
FROM #teste t GROUP BY substring(CONVERT(VARCHAR(10), date, 103), 4, 2)

Caso tenha alguma dúvida, pode postar...

Link to comment
Share on other sites

  • 0

Boa tarde a todos, só a carater de informação

Fiz o seguinte código:

SELECT     ROUND(SUM(ValorDoDocumento + Juros - Descontos), 2) AS Valor_Total, [b]MONTH(DataDoPagamento)[/b] AS Mes
FROM         dbo.[Duplicatas a Receber Pagas]
GROUP BY [b]MONTH(DataDoPagamento)[/b]
DE UMA FORMA SIMPLIFICADA:
SELECT SUM(valor), Month(Date) 
FROM #teste t GROUP BY Month(Date)

Neste caso troquei a função substring(CONVERT(VARCHAR(10), date, 103), 4, 2) para somar os valores por mês pela função MONTH(Date) que também funcionou. O que quero dizer é que as duas formas deram cérto =)

Caso alguém tiver um problema parecido pode usar as duas formas :D

abraço a todos

Edited by Vinicius Schuh
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.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652.1k
×
×
  • Create New...