Usuário com melhor resposta
SELECT QUANTIDADE PRODUTOS PERIODO MEDIA MENSAL

Pergunta
-
Bom dia a Todos,
Agradeço a atenção, se alguem puder me ajudar
preciso fazer uma select onde mostre meus produtos e a media mensal de quanntidade vendida,
como proceder ?
SELECT MIN(PRO.DESCRICAO) DESCRICAO,
SUM(I.QUANTIDADE),MEDIA = ?
FROM PRODUTOS PRO
JOIN ITENSPEDIDO I ON PRO.CODPRODUTO=I.CODPRODUTOO
WHERE DATA >=DATAINI AND
DATAFIM <= :DATAFIM
GROUP BY I.CODPRODUTO
OBRIGADO
Respostas
-
certamente que o join iria ser mais eficiente que a subquery, que por sua vez não é uma má prática. Eu precisaria de um cenário semelhante para testar a diferença e talvez modelar de uma forma diferente o que não é o meu caso agora...
Mas o importante é que o cliente vai ter o relatório!
Abraço!
Natan
- Marcado como Resposta Decio Morais Neto quinta-feira, 28 de maio de 2015 17:43
Todas as Respostas
-
-
-
-
-
-
-
-
Obrigado Natan,
porem eu preciso saber a media mensal desse item,
quanto ao case
seria pq no item eu tenho unidade a ser vendia como PC ou CT
ja o estoque minimo pega direto no produto,
como fazer pra essa media ser mensal no caso teria q dividir o total por 5
-
-
-
-
-
tenta assim:
SUM(I.QUANTIDADE) / (MAX(MONTH(P.DATA_PEDIDO)) - MIN(MONTH(P.DATA_PEDIDO))) MEDIA_MES
Natan
- Editado 'Natan Silva quinta-feira, 28 de maio de 2015 14:53
-
-
-
Olá Natan agradeço a atenção,
tentei tambem e nao obtive resultado, continuou o erro
ai fiz assim :
SELECT TOTITEM,PRODUTO,AGEL,MINIMO,MAIORMES,QTDE,QTDE/MAIORMES AS MEDIA,GRUPO,SUBGRUPO FROM
(SELECT COUNT(i.codproduto) TOTITEM ,
MIN(PRO.DESCEQ) PRODUTO,
MIN(PRO.CODEAN) AGEL,
MIN(PRO.EstMinimo) MINIMO,
MAX(MONTH(P.DATAPEDIDO)) MAIORMES,
MIN(MONTH(P.DATAPEDIDO)) MENOSMES,
SUM(CASE WHEN I.Unidade='CT' THEN I.Qtde *100 ELSE I.Qtde END) QTDE,
MIN(G.DESCRICAO) GRUPO,
MIN(S.DESCRICAO) SUBGRUPO
FROM PRODUTOS PRO
JOIN ITENSPEDIDO I ON PRO.CODPRODUTO = I.CODPRODUTO
JOIN SUBGRUPOS S ON PRO.CODSUBGRUPO=S.CODSUBGRUPO
JOIN GRUPOPRODUTOS G ON PRO.CODGRUPO=G.CODGRUPO
JOIN PEDIDOS P ON I.NROPEDIDO=P.NROPEDIDO
WHERE PRO.CODGRUPO=9
AND Situeq = 0
AND year(DATAPEDIDO) =2015
GROUP BY I.CODPRODUTO)pedporém nao sei o custo disso de performance , porem deu certo.
teria forma melhor ?
Obrigado.
-
Oi segue outro raciocinio tbm deu certo
hehehe
SELECT COUNT(i.codproduto) TOTITEM ,
MIN(PRO.DESCEQ) PRODUTO,
MIN(PRO.CODEAN) AGEL,
MIN(PRO.EstMinimo) MINIMO,
MAX(MONTH(P.DATAPEDIDO)) MAIORMES,
MIN(MONTH(P.DATAPEDIDO)) MENOSMES,
SUM(CASE WHEN I.Unidade='CT' THEN I.Qtde *100 ELSE I.Qtde END) QTDE,
SUM(CASE WHEN I.Unidade='CT' THEN I.Qtde *100 ELSE I.Qtde END)/ MAX(MONTH(P.DATAPEDIDO)) MEDIA,
MIN(G.DESCRICAO) GRUPO,
MIN(S.DESCRICAO) SUBGRUPO
FROM PRODUTOS PRO
JOIN ITENSPEDIDO I ON PRO.CODPRODUTO = I.CODPRODUTO
JOIN SUBGRUPOS S ON PRO.CODSUBGRUPO=S.CODSUBGRUPO
JOIN GRUPOPRODUTOS G ON PRO.CODGRUPO=G.CODGRUPO
JOIN PEDIDOS P ON I.NROPEDIDO=P.NROPEDIDO
WHERE PRO.CODGRUPO=9
AND Situeq = 0
AND year(DATAPEDIDO) =2015
GROUP BY I.CODPRODUTO -
certamente que o join iria ser mais eficiente que a subquery, que por sua vez não é uma má prática. Eu precisaria de um cenário semelhante para testar a diferença e talvez modelar de uma forma diferente o que não é o meu caso agora...
Mas o importante é que o cliente vai ter o relatório!
Abraço!
Natan
- Marcado como Resposta Decio Morais Neto quinta-feira, 28 de maio de 2015 17:43