Jump to content
charlie69

juntar duas querys

Recommended Posts

charlie69

Bons dias

sou novo nisto de programar em sql.

Quero algo do genero, vai buscar o ID da primeira operação de um cliente, na tabela Clientes:

SELECT TOP 1 ([Clientes].ID) AS IDCliente
FROM [Clientes]
WHERE ((([Cliente].NCliente)="12144"))
ORDER BY [Cliente].ID;

Com esse IDCliente, vai buscar o somatório de todos os custos referentes a esse IDCliente montante à tabela Custos

como fazer isso?

Cumps

Modificação:

já descobri uma possível solução:

SELECT Sum([Custos].Valor) AS Expr1
FROM [Custos]
WHERE ((([Custos].Operação_ID)=(SELECT TOP 1 ([Clientes].ID)
FROM [Clientes]
WHERE ((([Clientes].NCliente)="12144"))
ORDER BY [Clientes].ID)));

o problema é que está a duplicar-me os valores? do tipo, soma, e de seguida todas as linhas dos valores. é mesmo assim? ou tenho algo mal que me está a duplicar?

Share this post


Link to post
Share on other sites
edsousa

Bom, podes usar multiplas tabelas no FROM e fazer no WHERE uma condição para relacionar as tabelas..

SELECT Custos.*
FROM Custos, Clientes
WHERE Clientes.NCliente="12144" AND Custos.IDCliente = Clientes.ID;

EDIT: Não  vi  a parte do somatório  :wallbash:

Deves fazer um agrupamento

SELECT Custos.IDCliente, SUM(Custos.Valor)
FROM Custos, Clientes
WHERE Clientes.NCliente="12144" AND Custos.IDCliente = Clientes.ID
GROUP BY Custos.IDCliente;


Tharis Fan ClubMay Tharis bless you

Share this post


Link to post
Share on other sites
falco

Queres um resultset que contenha em cada row o id de cliente e outro com o sumatorio dos vários campos de custos? É isso? Isto para todos os clientes? Ou apenas para um em específico?

Share this post


Link to post
Share on other sites
charlie69

quero só uma coluna, que contenha todos os custos de um cliente em especifico

Share this post


Link to post
Share on other sites
charlie69

Bom, podes usar multiplas tabelas no FROM e fazer no WHERE uma condição para relacionar as tabelas..

SELECT Custos.*
FROM Custos, Clientes
WHERE Clientes.NCliente="12144" AND Custos.IDCliente = Clientes.ID;

EDIT: Não  vi  a parte do somatório  :wallbash:

Deves fazer um agrupamento

SELECT Custos.IDCliente, SUM(Custos.Valor)
FROM Custos, Clientes
WHERE Clientes.NCliente="12144" AND Custos.IDCliente = Clientes.ID
GROUP BY Custos.IDCliente;

e se quiser apenas os valores dos custos sem soma?

Share this post


Link to post
Share on other sites
haztik

Esta maneira seria a correcta, pois multiplas tabelas na clausula FROM é muito propensa a erros.

SELECT Custos.IDCliente, SUM(Custos.Valor)
FROM Custos (NOLOCK)
JOIN  Clientes (NOLOCK) ON Custos.IDCliente = Clientes.ID
WHERE Clientes.NCliente='12144' 
GROUP BY Custos.IDCliente;

Share this post


Link to post
Share on other sites
edsousa

ok ok, leva a bicicleta  :P

Tens razão em dizer que os joins são mais aconselhados, e eu até uso sempre os joins sempre que os critérios são mais complexos que duas tabelas com inner join.


Tharis Fan ClubMay Tharis bless you

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.