none
Dúvida com Select RRS feed

  • Pergunta

  • Olá amigos, estou eu aqui com uma outra dúvida...rs

    Tenho o código abaixo:
    SELECT P.data_pedido, PIT.codigo_pedido, SUM((PIT.Quantidade*Pr.peso)*Pr.peso) AS Peso_Total, P.CEP, P.taxa_envio, R.codigo_objeto, R.data AS Data_Envio 
    FROM 
        Pedido_Item AS PIT 
        INNER JOIN Pedidos AS P ON PIT.codigo_pedido = P.codigo_pedido 
        INNER JOIN Produtos AS Pr ON LEFT(PIT.codigo_produto,5) = Pr.codigo_produto 
        INNER JOIN Remessa AS R ON P.codigo_pedido = R.codigo_pedido 
     
    WHERE 
        P.Atendido = 1 AND P.data_pedido > '11/01/2008' AND P.taxa_envio > 0 
    GROUP BY 
        PIT.codigo_pedido, P.data_pedido, P.CEP, P.taxa_envio, R.codigo_objeto, R.data 
     
    ORDER BY 
        P.data_pedido 

    Utilizo este select para obter uma somatória do peso total de um determinado pedido, somando todos os pesos dos produtos associados a eles... Está me trazendo todas as informações que preciso, porém a soma do peso está sendo multiplicada pela quantidade de ítens do produto... Deve ser alguma coisinha bem simples, mais estou desde a outra semana tentando e não consegui descobrir o porque!

    Novamente conto com a ajuda de vocês...

    Obrigado.

    Jorge Lima
    segunda-feira, 2 de fevereiro de 2009 21:17

Respostas

  • Jorge,

    Você esta utilizando uma fórmula que esta realizando justamente este cálculo, fazendo uma soma e multiplicando os valores pelo peso e depois multiplicando novamente.

     

    O que exatamente você necessita que esta fórmula execute?


    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    • Marcado como Resposta JayJr83 quinta-feira, 18 de junho de 2009 16:11
    terça-feira, 3 de fevereiro de 2009 10:48

Todas as Respostas

  • Olá Jorge,

    Não sei se entendi a tua dúvida. A soma do peso está sendo multiplica pela quantidade, e isto está errado, é isso?

    Pois este trecho da tua query está fazendo exatamente isso!

    SUM((PIT.Quantidade*Pr.peso)*Pr.peso)

    É este o problema? Se não for, detalhe um pouquinho melhor.

    Um abraço,
    Raul Santos Neto

    segunda-feira, 2 de fevereiro de 2009 21:22
  • Jorge,

    Você esta utilizando uma fórmula que esta realizando justamente este cálculo, fazendo uma soma e multiplicando os valores pelo peso e depois multiplicando novamente.

     

    O que exatamente você necessita que esta fórmula execute?


    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    • Marcado como Resposta JayJr83 quinta-feira, 18 de junho de 2009 16:11
    terça-feira, 3 de fevereiro de 2009 10:48
  • O código acima estava incorreto... O que estou usando é:

    SELECT P.data_pedido, PIT.codigo_pedido, SUM(PIT.Quantidade*Pr.peso) AS Peso_Total, P.CEP, P.taxa_envio, R.codigo_objeto, R.data AS Data_Envio    
    FROM    
        Pedido_Item AS PIT    
        INNER JOIN Pedidos AS P ON PPIT.codigo_pedido = P.codigo_pedido    
        INNER JOIN Produtos AS Pr ON LEFT(PIT.codigo_produto,5) = Pr.codigo_produto    
        INNER JOIN Remessa AS R ON P.codigo_pedido = R.codigo_pedido    
        
    WHERE    
        P.Atendido = 1 AND P.data_pedido > '11/01/2008' AND P.taxa_envio > 0    
    GROUP BY    
        PIT.codigo_pedido, P.data_pedido, P.CEP, P.taxa_envio, R.codigo_objeto, R.data    
        
    ORDER BY    
        P.data_pedido    
     

     O que eu preciso é assim...

    Tabelas que eu tenho no banco:

    Tabela Produtos
    codigo_produto | Nome_produto | Peso
    01234          | Produto 1    | 0,4
    12345          | Produto 2    | 0,2
    12545          | Produto 2    | 1


    Tabela Pedidos
    codigo_pedido | data_pedido | codigo_cliente | taxa_envio | CEP
    00001         | 11/31/2008  |     00123     |  7,3   | 04232440
    00002         | 11/30/2008  |      45680     |  2,5   | 02656587

    Tabela Pedido_Item
    codigo_pedido | codigo_produto | quantidade_produto
    00001       | 0123400000001  |    2
    00001       | 1234500000002  |    1
    00002       | 1234500000002  |    3

    Tabela Remessa
    codigo_pedido | data_remessa | numero_remessa
    00001         | 02/12/2008   | sw1111111111br
    00002         | 02/12/2008   | sw023456789br

    O resultado que eu preciso trazer na consulta:

    data_pedido | codigo_pedido | Peso_Total |    CEP   | taxa_envio | numero_remessa | data_envio
    11/31/2008  |   00001      |     1      | 04232440 |    7,3    | sw1111111111br | 02/12/2008  
    11/30/2008  |    00002      |   0,6      | 02656587 |     2,5    | sw023456789br  | 02/12/2008  

    Já consigo trazer todos as colunas, só o pesso que ele está trazendo errado.... Ele me mostra:

    data_pedido | codigo_pedido | Peso_Total |    CEP   | taxa_envio | numero_remessa | data_envio
    11/31/2008  |   00001      |     3      | 04232440 |    7,3    | sw1111111111br | 02/12/2008  
    11/30/2008  |    00002      |   1,8      | 02656587 |     2,5    | sw023456789br  | 02/12/2008 

    Se tiver apenas 1 ítem no pedido o resultado fica certinho, agora quando tem mais de 1 ele pega o resultado da soma dos pesos e multiplica pela quantidade de ítens relacionados ao pedido.

    Obrigado a todos....

    Abraços.


    Jorge Lima
    terça-feira, 3 de fevereiro de 2009 13:20