Ir para conteúdo

POWERED BY:

Arquivado

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

lurufino

procedures com calculos entre datas

Recommended Posts

Oi, pessoal

 

Abaixo tem um pedaço da minha procedure, onde está ocasionando o meu problema.

 

CREATE PROCEDURE SP_TESTE	@DATA DATETIME,	@REC_ANT FLOAT OUTPUT,	@DES_ANT FLOAT OUTPUTASSELECT @DES_ANT = ISNULL( ( SELECT SUM(VALOR) FROM TBDESPESA where DATA = DATEADD( MONTH, -1, @DATA ) ), 0 );SELECT @REC_ANT = ISNULL( (SELECT SUM(VALOR) FROM TBRECEITA where DATA = DATEADD( MONTH, -1, @DATA ) ), 0 );RETURNGO

É o seguinte:

 

Do jeito que está aí, ele tráz como resultado da consulta a soma dos valores do mês anterior ao que estou consultando.

 

Só que o que preciso é assim:

Nesse parâmetro @DATA que recebo na procedure eu tenho "dd/mm/yyyy" que quero consultar.

 

Preciso que na minha select traga a soma dos valores contando a partir do dia '01/01 do ano que o @DATA traz até o mês anterior ao de @DATA.

 

Por favor me ajudem, isso é Urgente!

 

 

Luciene http://forum.imasters.com.br/public/style_emoticons/default/blush.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde Luciene

 

Segue a forma como você pode conseguir fazer :

 

CREATE PROCEDURE SP_TESTE

(

@DATA DATETIME,

@REC_ANT FLOAT OUTPUT,

@DES_ANT FLOAT OUTPUT

)

AS

Begin

Declare @var_mesdif Int,

@var_jandoano DateTime

 

-- Pega Janeiro do ano corrente

Set @var_jandoano = Convert(DateTime, '01/01/' + Convert(Char(4), Year(GetDate())))

 

-- Pega a diferença entre o mês atual e Janeiro e já coloca como nro negativo

Set @var_mesdif = (DateDiff(Month, @var_jandoano, getdate())

 

If @var_mesdif > 0

Begin

Set @var_mesdif = @var_mesdif - 1

SELECT @DES_ANT = ISNULL( ( SELECT SUM(VALOR) FROM TBDESPESA where DATA = DATEADD( MONTH, @var_mesdif, @DATA ) ), 0 )

SELECT @REC_ANT = ISNULL( (SELECT SUM(VALOR) FROM TBRECEITA where DATA = DATEADD( MONTH, @var_mesdif, @DATA ) ), 0 )

End

 

-- Select já existente

SELECT @DES_ANT = ISNULL( ( SELECT SUM(VALOR) FROM TBDESPESA where DATA = DATEADD( MONTH, -1, @DATA ) ), 0 )

SELECT @REC_ANT = ISNULL( (SELECT SUM(VALOR) FROM TBRECEITA where DATA = DATEADD( MONTH, -1, @DATA ) ), 0 )

 

RETURN

GO

 

As linhas que eu acrescentei estão em verde.

 

Espero ter ajudado.

 

Att,

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi marcos, Valeu aí a tua ajuda, fiz as alterações que você me sugeriu e em parte está funcionando, só que na minha página escolho o mês e o ano que a pessoa quer consultar, e cada vez que o select do mês é alterado ele dá um reload na página, só que todas as outras minhas consultas estão trazendo o resultado normal, mas exatamente o total da receita e da despesa anterior não está vindo, não acusa nenhum erro mas também traz o valor como sendo 0. Não estou entendendo pq, e não estou conseguindo resolver.please, help meLuciene :huh:

Compartilhar este post


Link para o post
Compartilhar em outros sites

luciene, este é um exemplo, nao sei se o que voce quer é isso, mas somei os valores para cada data de emissao anteriores a uma data no mesmo ano...ve se te ajuda na procedure....select emissao, sum(TOT_VALOR_ORIGINAL) as total from vendas where year(emissao) = 2004 and month(emissao) < 06 group by emissao order by emissao

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.