1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

sql server 2005

Discussão em 'Programação' iniciada por fabio_wilson, 4 de Dezembro de 2006. (Respostas: 13; Visualizações: 1197)

  1. Preciso de ajuda de alguem que perceba de T-SQL para resolver um query!!

    temos 2 tabelas a tabela factura e facturadetalhe e o campo que liga ambas as tabelas é o campo vendaid, na tabela factura temos informação sobre quem fez a venda e na tabela facturadetalhe temos informação sobre os produtos vendidos e as quantidades. E o query pedido é o seguinte: Para cada produto o vendedor mais eficaz!!! Alguem consegue fazer isto?? visualmente é possivel ver o resultado portanto o query deve ser possivel de executar...
     
  2. KiKas

    KiKas Power Member

    sim.

    funções de agregação. max, avg, sum ...

    Mas como a tua informação é muito resumida não se pode ajudar mais.

    alem disso como parece que isto é para te safar num trabalho qq, o que te recomendo é ires estudar.
     
  3. 128500

    128500 Power Member

    Hi,
    afinal foi um bocado mais interessante do que eu pensei.

    no ambiente BD Oracle 9i resolução é seguinte:

    imagina que tens duas tabelas:
    com nomes a1 e a2
    onde a1 - tabela com dados dos compradores/vendedores e a2 - detalhes, "n" - chave de relação.

    para construir query acho que tens que usar pseudonimos das tabelas, "HAVING", "GROUP BY"

    algoritmo:
    1. seleccionar todos tipos produtos quais se encontram nos detalhes.
    2. seleccionar nomes dos vendedores/compradores e quantidades respectivas dos produtos.
    3. verificar se soma quantidade para este vendedor/comprador é de facto máxima (caso não - FORA... :) ).


    Minha solução ( acho que pode ser optimizada ou feita noutra maneira, claro ) :
    PS: "quote" tira alguns espaços do codigo, por isso é melhor usar "ideia" só... :)
    PPS: caso alguem sabe solução mais facil queria saber... :) .. sempre viver - sempre aprender...

    Cumprimentos.
     
  4. dElpH!

    dElpH! 1st Folding then Sex

    Boas , vamos la ver...

    Tabela Venda

    IDVenda
    CodVenda
    CodVendedor
    Venda


    Tabela VendaDetalhe

    IDVendaDetalhe
    IDVenda
    IDProduto
    Quantidade



    Select CodVendedor,Sum(Quantidade) From Venda
    inner join VendaDetalhe on VendaDetalhe.IDVenda = Venda.IDVenda
    Group By Venda.CodVendedor


    Penso que isto de-ta o que precisas mais alguma coisa avisa []'s
     
  5. 128500

    128500 Power Member

    E como vai ser em relação do condição seguinte? :-D

     
  6. dElpH!

    dElpH! 1st Folding then Sex

    Faz um order by pela Max(Quantidade) e aparece por ordem decrecente os vendedores que venderam mais ...

    Edit : ah e falta um group By Produto

    Select CodVendedor,IDProduto,Sum(Quantidade) From Venda
    inner join VendaDetalhe on VendaDetalhe.IDVenda = Venda.IDVenda
    Group By Venda.CodVendedor,VendaDetalhe.IDProduto
     
  7. 128500

    128500 Power Member

    ok.
    traga todos registos...

    mas, o que fazer quando precisas mesmo máximos para cada um produto, sem fazer "order by"?

    :)
     
  8. dElpH!

    dElpH! 1st Folding then Sex

    Na querie que pus, já traz o total de produtos vendidos por cada vendedor.
    Cumps []'s
     
  9. KiKas

    KiKas Power Member

    isso de fazer o order by é muito má politica!!!


    obter o mais "perfomante" para cada produto podia ser por exemplo assim:

    select C.vendedor,C.produto,C.total from (
    select a.vendedor,b.produto,sum(b.quantidade) total
    from factura a, facturaDet b
    where a.vendaid=b.vendaid
    group by a.vendedor,b.produto) C,
    (select produto,max(total) total
    from(
    select a.vendedor,b.produto,sum(b.quantidade) total from factura a,facturaDet b
    where a.vendaid=b.vendaid
    group by a.vendedor,b.produto)
    group by produto ) D
    where C.produto=D.produto
    and C.total=D.total


    isto em oracle
     
    Última edição: 4 de Dezembro de 2006
  10. dElpH!

    dElpH! 1st Folding then Sex

    No meu posto pus o Order by , mas na querie que fiz novamente nao está nenhum order by ora vejam lá


    Select CodVendedor,IDProduto,Sum(Quantidade) From Venda
    inner join VendaDetalhe on VendaDetalhe.IDVenda = Venda.IDVenda
    Group By Venda.CodVendedor,VendaDetalhe.IDProduto

    Cumps
     
  11. 128500

    128500 Power Member

    ok... perfeito... temos totais dos produtos vendidos por cada vendedor....

    mas como eu percebo lingua portuguesa o objectivo não foi este...

    ou eu me engano?
     
  12. KiKas

    KiKas Power Member

    tens no meu post o vendedor com a melhor performace (quantidade) para cada produto...
     
  13. dElpH!

    dElpH! 1st Folding then Sex

    Ou pouco me engano ou as 3 queries aqui escritas por tres users vais dar ao mesmo ?

    Cumps
     
  14. KiKas

    KiKas Power Member

    Não!

    os queries anteriores devolvem o somatorio das das quantidades vendidadas por vendedor e por porduto. Pode haver por exemplo dois vendedores que vendam o mesmo produto mas com quantidades diferentes.

    O que ele pretende é dos vendedores do produto x qual o que vendeu mais. É essa a diferença que existe no ultimo querie.
     

Partilhar esta Página