Select para listar saídas de produtos [RESOLVIDO]

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

Tenta fazer isso:

[code]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' 
AND PEDIDO.DATAEMISSAO < '2009-09-17 23:59:59' 

GROUP BY
PEDIDO.CDPEDIDO,
PRODUTO.CDPRODUTO ,
PRODUTO.CDBARRA ,
PRODUTO.NOME ,
ITEMPEDIDO.QUANTIDADE,
PRODUTO.UNIDADE [/code]

provavelmente de certo

se nao der, me fale o erro que deu

abraç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…

ta bom, uma pergunta… porque do

FROM PEDIDO,PRODUTO,ITEMPEDIDO

porque voce nao usou inner join?

isso assim fica meio estranho e errado

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

Se somas a quantidade, não agrupas pela quantidade.

ta, mas pq tu nao usou inner join?

e viva o palmeiras huahuahuahaua

A sim…e retirei do group by o ITEMPEDIDO.QUANTIDADE… erro de digitação…

Quanto ao inner join…como ficaria…não cheguei a usar ele…

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

abraço

Implementei o INNER JOIN aqui e deu certo também…

a única diferença que deu foi no from

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…

blz

é que como eu estou acostumado a usar inner join, falei para voce, caso voce queira usar

e tbm no inner join ele fica mais "organizado"
pelo menos eu acho

mas qqc só gritar

abraço

Obrigado… e vou começar a usar o INNER JOIN… é como vc falou…fica mais organizado e fácil de entender depois o código…Valeu