Ir para conteúdo

Arquivado

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

Davis

While para inserir em tabela temporária

Recommended Posts

Bom, eu tenho uma SP que calcula quantas doações foram em um determinado mês. A query que faz esse cálculo é essa:

INSERT INTO #tbRep (id_customer, amount_pay)		(			SELECT COUNT(DISTINCT H.id_customer) as id_customer, SUM(H.amount_pay) as amount_pay			FROM tbHistory as H			INNER JOIN tbCustomers as C ON H.id_customer = C.id			WHERE				(H.amount_pay is not null) AND				(C.del = '0') AND				(C.type_member = 7) AND				(YEAR(H.date_pay) = YEAR(@date) AND MONTH(H.date_pay) = MONTH(@date))		)

Essa parte funciona muito bem mas só retorna os dados de um mês. Eu gostaria que fosse anual, sabe. Começando do mês atual (maio/2007) e terminando 12 meses antes (maio/2006). Pensei em fazer um WHILE pra poder repetir essa query até a data limite mas não consegui fazer nada.

 

Lembrando que o @date é parâmetro fornecido pelo usuário. No caso do While, seria possível usar esse parâmetro?

 

Mas, alguém aí tem uma idéia de como eu posso usar o WHILE nessa bagaça? Ou alguém tem uma idéia melhor?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Espero que iste te ajude apesar de ter uma forma de exibir tudo de uma vez, acho que você vai precisar informar os campos: mês e ano.

-- @datef: é a data final.While (datediff(mm, @date, @datef) >= 0) Begin		INSERT INTO #tbRep (id_customer, amount_pay)		(			SELECT COUNT(DISTINCT H.id_customer) as id_customer, SUM(H.amount_pay) as amount_pay			FROM tbHistory as H			INNER JOIN tbCustomers as C ON H.id_customer = C.id			WHERE				(H.amount_pay is not null) AND				(C.del = '0') AND				(C.type_member = 7) AND				(YEAR(H.date_pay) = YEAR(@date) AND MONTH(H.date_pay) = MONTH(@date))		)			SELECT @date = DATEADD(MM, 1, @date)End

Até mais,

 

Renato J. C. Lima

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.