sql server 2005

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...
 
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...

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.
 
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
CREATETABLE A1
(
N NUMBER,
NOME VARCHAR2(100 BYTE)
)
CREATETABLE A2
(
N NUMBER,
COD_PROD VARCHAR2(10 BYTE),
DESC_PROD VARCHAR2(50 BYTE),
QUANTIDADE NUMBER
)

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 ) :
select distinct produto.cod_prod, vendedor.nome, sum(quantidade.QUANTIDADE) as tst
from a2 produto,a2 quantidade,a1 vendedor
where produto.cod_prod=quantidade.cod_prod
and produto.N=vendedor.N
and quantidade.N=vendedor.N
having sum(quantidade.QUANTIDADE)=(select max(sum(quantidade))
from a1,a2
where a1.N=a2.N
and a2.cod_prod=produto.cod_prod
group by nome,cod_prod)
group by produto.cod_prod, vendedor.nome

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.
 
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
 
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
 
Na querie que pus, já traz o total de produtos vendidos por cada vendedor.
Cumps []'s

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:
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
 
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?
 
Ou pouco me engano ou as 3 queries aqui escritas por tres users vais dar ao mesmo ?

Cumps

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.
 
Back
Topo