Criar uma query de consultar gerando uma Media mensal sem considerar os meses que nao tem valor

25/05/2018

0

Bom galera basicamente eu gostaria de pegar a movimentação de vendas dos ultimos 12 meses de uma empresa que presto serviço, e fazer uma media de venda de cada produto somente dos meses que existir venda, não posso pegar simplesmente e fazer SUM(qtde_vendida)/12, por que dessa forma, todo produto novo em estoque quebrara o resultando trazendo uma media que não é verdadeira
se alguem tiver alguma ideia de como faço isso eu agradeceria a ajuda
Phellipe Rodrigues

Phellipe Rodrigues

Responder

Post mais votado

25/05/2018

Bom dia.
Você pode ir nesta linha de raciocínio..

select
	avg(sel.total) as media    
from(select
	count(distinct(month(dt_pg))) as meses,
    month(dt_pg),
	sum(Valor) as total
from
	teste
group by
	year(dt_pg), month(dt_pg)) as sel


[]´s

Leandro Chiodini

Leandro Chiodini
Responder

Mais Posts

25/05/2018

Leandro Chiodini

pode ser somente

select
	avg(sel.total) as media    
from(select
	sum(Valor) as total
from
	teste
group by
	year(dt_pg), month(dt_pg)) as sel
Responder

25/05/2018

Emerson Nascimento

tente assim:

select
   p.produto,
   sum(v.qtde_vendida) total,
   count(distinct month(v.data_venda)) num_meses_venda,
   sum(v.qtde_vendida) / count(distinct month(v.data_venda)) qtde_media_mes
from produtos p
inner join vendas v on v.produto = p.produto
group by p.produto
order by p.produto

Responder

25/05/2018

Phellipe Rodrigues

Amigo eu compreendi como faz, mas da uma olhada na minha query, eu nao consegui ver como encaixar nela, se puder me ajudar ficarei grato

select  pd.codigo+'-'+p.descricao as produto,  
media.media,  
sum(pd.qtde_vol)as  qtdeVendida,  
cast(p.est_atual/p.qtdeporcaixa as numeric(15,2))as  estoque,  
cast((p.est_atual/p.qtdeporcaixa) - sum(pd.qtde_vol)as numeric(15,2))  as pedidoVenda,  
cast((p.est_atual/p.qtdeporcaixa)-media.media-sum(pd.qtde_vol)as numeric(15,2)) as pedidoMedia  
from PEDIDOS.dbo.pedidos_det pd  inner join PEDIDOS.dbo.pedidos_cab pc on pc.numero = pd.numero  
inner join ESTOQUE.dbo.Produtos p on  p.codigo = pd.codigo 
 inner join (select pd.codigo, SUM(pd.qtde_vol)/6 media from PEDIDOS.dbo.pedidos_det pd inner join PEDIDOS.dbo.pedidos_cab pc on pc.numero = pd.numero where pc.dt_emissao >= '2017-25-11' and pc.dt_emissao <= '2018-25-05' and pc.status = 2 group by pd.codigo)as media on media.codigo = pd.codigo  
 where pc.dt_emissao >='2018-01-05' and pc.dt_emissao <= '2018-25-05'  and pc.status <> 2 and pc.status <> 3  and p.grupo = 1  group by pd.codigo,p.descricao,p.est_atual,media.media,p.qtdeporcaixa order by produto 
Responder

25/05/2018

Phellipe Rodrigues

tente assim:

select
   p.produto,
   sum(v.qtde_vendida) total,
   count(distinct month(v.data_venda)) num_meses_venda,
   sum(v.qtde_vendida) / count(distinct month(v.data_venda)) qtde_media_mes
from produtos p
inner join vendas v on v.produto = p.produto
group by p.produto
order by p.produto



Amigo eu compreendi como faz, mas da uma olhada na minha query, eu nao consegui ver como encaixar nela, se puder me ajudar ficarei grato
select  pd.codigo+'-'+p.descricao as produto,  
media.media,  
sum(pd.qtde_vol)as  qtdeVendida,  
cast(p.est_atual/p.qtdeporcaixa as numeric(15,2))as  estoque,  
cast((p.est_atual/p.qtdeporcaixa) - sum(pd.qtde_vol)as numeric(15,2))  as pedidoVenda,  
cast((p.est_atual/p.qtdeporcaixa)-media.media-sum(pd.qtde_vol)as numeric(15,2)) as pedidoMedia  
from PEDIDOS.dbo.pedidos_det pd  
inner join PEDIDOS.dbo.pedidos_cab pc on pc.numero = pd.numero  
inner join ESTOQUE.dbo.Produtos p on  p.codigo = pd.codigo 
inner join (select pd.codigo, SUM(pd.qtde_vol)/6 media 
                   from PEDIDOS.dbo.pedidos_det pd 
                   inner join PEDIDOS.dbo.pedidos_cab pc on pc.numero = pd.numero 
                   where pc.dt_emissao >= '2017-25-11' 
                    and pc.dt_emissao <= '2018-25-05' 
                    and pc.status = 2 
                    group by pd.codigo)as media on media.codigo = pd.codigo  
where pc.dt_emissao >='2018-01-05' 
and pc.dt_emissao <= '2018-25-05'  
and pc.status <> 2 
and pc.status <> 3  
and p.grupo = 1  
group by pd.codigo,p.descricao,p.est_atual,media.media,p.qtdeporcaixa
order by produto 
Responder

25/05/2018

Emerson Nascimento

select
  pd.codigo+'-'+p.descricao as produto,
  sum(pd.qtde_vol) as qtdeVendida,
  cast(p.est_atual/p.qtdeporcaixa as numeric(15,2)) as estoque,  
  cast((p.est_atual/p.qtdeporcaixa) - sum(pd.qtde_vol) as numeric(15,2)) as pedidoVenda, -- não entendi
  sum(pd.qtde_vol) / count(distinct month(pc.dt_emissao)) media -- calcula a média
--  cast((p.est_atual/p.qtdeporcaixa) - media.media-sum(pd.qtde_vol)as numeric(15,2)) as pedidoMedia -- não entendi
from
  PEDIDOS.dbo.pedidos_det pd
inner join
  PEDIDOS.dbo.pedidos_cab pc on pc.numero = pd.numero
inner join
  ESTOQUE.dbo.Produtos p on p.codigo = pd.codigo
where
  pc.dt_emissao between '2018-01-05' and '2018-25-05'
  and pc.status <> 2
  and pc.status <> 3
  and p.grupo = 1
group by
  pd.codigo,p.descricao,p.est_atual,p.qtdeporcaixa
order by
  produto
Responder

25/05/2018

Phellipe Rodrigues

select
  pd.codigo+'-'+p.descricao as produto,
  sum(pd.qtde_vol) as qtdeVendida,
  cast(p.est_atual/p.qtdeporcaixa as numeric(15,2)) as estoque,  
  cast((p.est_atual/p.qtdeporcaixa) - sum(pd.qtde_vol) as numeric(15,2)) as pedidoVenda, -- não entendi
  sum(pd.qtde_vol) / count(distinct month(pc.dt_emissao)) media -- calcula a média
--  cast((p.est_atual/p.qtdeporcaixa) - media.media-sum(pd.qtde_vol)as numeric(15,2)) as pedidoMedia -- não entendi
from
  PEDIDOS.dbo.pedidos_det pd
inner join
  PEDIDOS.dbo.pedidos_cab pc on pc.numero = pd.numero
inner join
  ESTOQUE.dbo.Produtos p on p.codigo = pd.codigo
where
  pc.dt_emissao between '2018-01-05' and '2018-25-05'
  and pc.status <> 2
  and pc.status <> 3
  and p.grupo = 1
group by
  pd.codigo,p.descricao,p.est_atual,p.qtdeporcaixa
order by
  produto


Cara deu certinho, muito obrigado mesmo pela ajuda
Responder

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

Aceitar