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

(Resolvido) somar valores entre datas SQL


Vinicius Schuh

Pergunta

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

8 respostass a esta questão

Posts Recomendados

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

Editado por Vinicius Schuh
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
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...