Olá…
Estou meio fraco no sql por isso venho pedir a ajuda de vocês…
O problema é o seguinte…
Tenho um sistema de controle de estoque e vendas. Estou fazendo uma tela onde é listado os produtos que sairam em determinado mes.
Nesta tabela deverão aparecer o CDPRODUTO, NOMEPRODUTO, QUANTIDADE, VALORTOTAL e outros.
Como faço para gerar um Select na tabela Itens do pedido onde estão estes campos
Eu fiz um select assim :
SELECT
PEDIDO.CDPEDIDO,
PRODUTO.CDPRODUTO ,
PRODUTO.CDBARRA ,
PRODUTO.NOME ,
ITEMPEDIDO.QUANTIDADE,
PRODUTO.UNIDADE ,
(ITEMPEDIDO.VLUNITREALIZADO * ITEMPEDIDO.QUANTIDADE) AS TOTAL
FROM PEDIDO,PRODUTO,ITEMPEDIDO
WHERE NOT(PEDIDO.SITUACAO = 'C' )
AND ITEMPEDIDO.CDPEDIDO = PEDIDO.CDPEDIDO
AND ITEMPEDIDO.CDPRODUTO = PRODUTO.CDPRODUTO
AND PEDIDO.DATAEMISSAO > '2009-09-15 00:00:01' //data que sera passada pelo usuário. mas para exemplo fica assim
AND PEDIDO.DATAEMISSAO < '2009-09-17 23:59:59'
Ele lista certo. Mas mostra os produtos repetidos ou seja, se tiver um produto cadastrado em 10 pedidos, ele vai aparecer 10 vezes na listagem.
Gostaria de saber como posso fazer para aparecer somente uma vez e aumentando o campo quantidade.
Tentei usar o SUM() e o GROUP BY…Mas não estou acertando o sql… SE alguém ajudar, agradeço
Então…tentei utilizar o group by, mas não acontece nada…
tente usar em vez de ITEMPEDIDO.QUANTIDADE usar SUM(ITEMPEDIDO.QUANTIDADE) e o group by que vc me passou, mas continua listando produtos repetidos…
Valeu…
Comecei a mudar o select aqui… e adicionei o seu group by e agora deu… era o PEDIDO.CDPEDIDO que não estava deixando o GROUP BY funcionar…
o select ficou assim e funcionou…
SELECT
//retirei PEDIDO.CDPEDIDO
PRODUTO.CDPRODUTO ,
PRODUTO.CDBARRA ,
PRODUTO.NOME ,
SUM(ITEMPEDIDO.QUANTIDADE), //adicionei o sum aqui
PRODUTO.UNIDADE,
(SUM(ITEMPEDIDO.VLUNITREALIZADO * ITEMPEDIDO.QUANTIDADE)) AS TOTAL //e adicionei sum aqui
FROM PEDIDO,PRODUTO,ITEMPEDIDO
WHERE NOT(PEDIDO.SITUACAO = 'C' )
AND ITEMPEDIDO.CDPEDIDO = PEDIDO.CDPEDIDO
AND ITEMPEDIDO.CDPRODUTO = PRODUTO.CDPRODUTO
AND PEDIDO.DATAEMISSAO > '2009-09-15 00:00:01'
AND PEDIDO.DATAEMISSAO < '2009-09-17 23:59:59'
GROUP BY //adicionei o group by aqui....
PRODUTO.CDPRODUTO ,
PRODUTO.CDBARRA ,
PRODUTO.NOME ,
PRODUTO.UNIDADE
Obrigado… com o group by funcionou mesmo… E VIVA AO PALMEIRAS… he he he …valeu
entao cara, como nao sei os campos da tua tabela, nao da pra fazer, se der pra tu me passar os campos de cada tabela e suas respectivas chaves estrangeiras, ai sim eu posso te ajudas
isso foi como eu imaginei que era tua tabela, nao sei se ta certo,
quase certeza que nao esteja certo:
from itempedido
inner join produto on
itempedido.cdproduto = produto.cd
inner join pedido on
itempedido.cdpedido = pedido.cd
porque aquele negocio que tu fez de
fica meio estranho e nunca vi ngm usar isso
se der manda ae os campo com as chaves estrangeiras
FROM ITEMPEDIDO
INNER JOIN PRODUTO ON
ITEMPEDIDO.CDPRODUTO = PRODUTO.CDPRODUTO
INNER JOIN PEDIDO ON
ITEMPEDIDO.CDPEDIDO = PEDIDO.CDPEDIDO
e no WHERE, pois como usei as comparações no INNER JOIN, não prescisou das linhas no WHERE
AND ITEMPEDIDO.CDPEDIDO = PEDIDO.CDPEDIDO
AND ITEMPEDIDO.CDPRODUTO = PRODUTO.CDPRODUTO
no fim…dá na mesma… se usar o INNER JOIN… tem que adicionar as comparações no FROM… se não usar…usa as mesmas comparações no WHERE…
agora…quanto a questão de rapidez de consulta e outras questões de banco de dados eu não sei, mas tanto do seu jeito como do meu funcionou adicionando o group by que vc me sugeriu…