Consulta vendas Mês a Mês

SQL Server

Banco de Dados

13/07/2017

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

Curtidas 0

Respostas

Robson Morais

Robson Morais

13/07/2017

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)
GOSTEI 0
Robson Morais

Robson Morais

13/07/2017

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)
GOSTEI 0
Jailson Martins

Jailson Martins

13/07/2017

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
GOSTEI 0
Jailson Martins

Jailson Martins

13/07/2017

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
GOSTEI 0
Robson Morais

Robson Morais

13/07/2017

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
GOSTEI 0
POSTAR