Consulta vendas Mês a Mês

13/07/2017

0

Ola, pessoal!
Estou tentando uma consulta SQL que traga o seguinte resultado

Cliente VALOR_JANEIRO | VALOR_FEVEREIRO | VALOR_MARCO
JOAO 186.18 | 0 | 200

Mas estou sem sucesso, ja tentei até algo do tipo:

SELECT
E1.id_entidade AS Cliente,
case when MONTH(E1.data_vencimento) = 3 then sum(valor) end as VALORMARCO,
case when MONTH(E1.data_vencimento) = 5 then sum(valor) end as VALORMAIO
FROM
documento_pagar E1
WHERE
YEAR(E1.data_vencimento) in (2016)
and id_entidade = 22
GROUP BY E1.id_entidade, MONTH(E1.data_vencimento)

mas o resultado foi o seguinte:

Cliente VALORMARCO VALORMAIO
22 186.18 NULL
22 NULL 172.18
Jailson Martins

Jailson Martins

Responder

Posts

13/07/2017

Robson Morais

Bom dia....está no caminho certo....
creio que só faltou o else....tente assim e me fale o resultado...

SELECT
E1.id_entidade AS Cliente,
case when MONTH(E1.data_vencimento) = 3 then sum(valor) else 0 end as VALORMARCO,
case when MONTH(E1.data_vencimento) = 5 then sum(valor) else 0 end as VALORMAIO
FROM
documento_pagar E1
WHERE
YEAR(E1.data_vencimento) in (2016)
and id_entidade = 22
GROUP BY E1.id_entidade, MONTH(E1.data_vencimento)
Responder

13/07/2017

Robson Morais

testei aqui numa base do sqlserver..... e acho que lhe atende....

select fornecedor
,(case when (MONTH(DATA_EMISSAO) = 5) then sum(total) else 0 end) as valormaio
,(case when (MONTH(DATA_EMISSAO) = 6) then sum(total) else 0 end) as valorjunho
from dbo.pedido_compra
group by FORNECEDOR,MONTH(DATA_EMISSAO)
Responder

13/07/2017

Jailson Martins

Valeu esse até traz só que ele esta trazendo varias linhas para o mesmo cliente.
select id_entidade
,(case when (MONTH(data_vencimento) = 5) then sum(valor) else 0 end) as valormaio
,(case when (MONTH(data_vencimento) = 3) then sum(valor) else 0 end) as valormarco
from documento_pagar
group by id_entidade,MONTH(data_vencimento)


Resultado: traz duas linhas para o mesmo cliente, sendo que o mesmo faturou em maio e marco
id_entidade******valormaio*****valorjunho
22*******************0.00**********186.18
33*******************0.00***********71.75
22******************172.18**********0.00
Responder

13/07/2017

Jailson Martins

Valeu pela força @Robinhodemoraes, mas acho que consegui o que queria.
;with dados as(
select cast(t2.id_entidade as varchar(10))+' - '+ t2.nome as cliente
,(case when (MONTH(t1.data_vencimento) = 1) then sum(valor) else 0 end) as valorjaneiro
,(case when (MONTH(t1.data_vencimento) = 2) then sum(valor)else 0 end) as valorfevereiro
,(case when (MONTH(t1.data_vencimento) = 3) then sum(valor)else 0 end) as valormarco
,(case when (MONTH(t1.data_vencimento) = 4) then sum(valor)else 0 end) as valorAbril
,(case when (MONTH(t1.data_vencimento) = 5) then sum(valor)else 0 end) as valorMaio
,(case when (MONTH(t1.data_vencimento) = 6) then sum(valor)else 0 end) as valorJunho
,(case when (MONTH(t1.data_vencimento) = 7) then sum(valor)else 0 end) as valorJulho
,(case when (MONTH(t1.data_vencimento) = 8) then sum(valor)else 0 end) as valorAgosto
,(case when (MONTH(t1.data_vencimento) = 9) then sum(valor)else 0 end) as valorSetembro
,(case when (MONTH(t1.data_vencimento) = 10) then sum(valor)else 0 end) as valorOutubro
,(case when (MONTH(t1.data_vencimento) = 11) then sum(valor)else 0 end) as valorNovenbro
,(case when (MONTH(t1.data_vencimento) = 12) then sum(valor)else 0 end) as valorDezembro
from documento_receber t1
inner join entidade t2 (NOLOCK) on t1.id_entidade = t2.id_entidade
where YEAR(data_vencimento) = 2017
and t2.inativo = 0
group by MONTH(data_vencimento),t2.id_entidade,t2.nome
)
select dados.cliente
	  ,sum(dados.valorjaneiro) as Jan
	  ,sum(dados.valorfevereiro) as Fev
	  ,sum(dados.valormarco) as Mai
	  ,sum(dados.valorAbril) as Abr
	  ,sum(dados.valorMaio) as Mai
	  ,sum(dados.valorJunho) as Jun
	  ,sum(dados.valorJulho) as Jul
	  ,sum(dados.valorAgosto) as Ago
	  ,sum(dados.valorSetembro) as Setem
	  ,sum(dados.valorOutubro) as Outubro
	  ,sum(dados.valorNovenbro) as Nov
	  ,sum(dados.valorDezembro) as Dez
	
	   from dados
	group by dados.cliente
Responder

14/07/2017

Robson Morais

nesse caso pode fazer com o subselect;

select fornecedor, sum(valormaio), sum(valorjunho)
from (
select fornecedor
,(case when (MONTH(DATA_EMISSAO) = 5) then sum(total) else 0 end) as valormaio
,(case when (MONTH(DATA_EMISSAO) = 6) then sum(total) else 0 end) as valorjunho
from dbo.pedido_compra
group by FORNECEDOR,MONTH(DATA_EMISSAO)
) as x group by fornecedor
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar