charlie69 Posted June 18, 2009 at 09:57 AM Report Share #273280 Posted June 18, 2009 at 09:57 AM 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? Link to comment Share on other sites More sharing options...
edsousa Posted June 18, 2009 at 10:20 AM Report Share #273289 Posted June 18, 2009 at 10:20 AM 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 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 Link to comment Share on other sites More sharing options...
falco Posted June 18, 2009 at 10:32 AM Report Share #273292 Posted June 18, 2009 at 10:32 AM 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? Link to comment Share on other sites More sharing options...
charlie69 Posted June 18, 2009 at 10:36 AM Author Report Share #273294 Posted June 18, 2009 at 10:36 AM quero só uma coluna, que contenha todos os custos de um cliente em especifico Link to comment Share on other sites More sharing options...
charlie69 Posted June 18, 2009 at 10:37 AM Author Report Share #273296 Posted June 18, 2009 at 10:37 AM 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 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? Link to comment Share on other sites More sharing options...
edsousa Posted June 18, 2009 at 10:40 AM Report Share #273298 Posted June 18, 2009 at 10:40 AM é igual a primeira query que apresentei, mas com Custos.Valor em vez do Custos.* Tharis Fan ClubMay Tharis bless you Link to comment Share on other sites More sharing options...
charlie69 Posted June 18, 2009 at 10:45 AM Author Report Share #273302 Posted June 18, 2009 at 10:45 AM thank you 😉 :smoke: Link to comment Share on other sites More sharing options...
haztik Posted June 18, 2009 at 11:27 AM Report Share #273315 Posted June 18, 2009 at 11:27 AM 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; Link to comment Share on other sites More sharing options...
edsousa Posted June 18, 2009 at 11:45 AM Report Share #273321 Posted June 18, 2009 at 11:45 AM multiplas tabelas na clausula FROM é muito propensa a erros. [citation needed] Tharis Fan ClubMay Tharis bless you Link to comment Share on other sites More sharing options...
haztik Posted June 18, 2009 at 11:55 AM Report Share #273323 Posted June 18, 2009 at 11:55 AM [citation needed] Ok 😛 Depois do teu pedido de citação, encontrei algo na net a falar disso... vou postar aqui o link http://stackoverflow.com/questions/894490/sql-left-join-vs-multiple-tables-on-from-line Link to comment Share on other sites More sharing options...
edsousa Posted June 18, 2009 at 12:07 PM Report Share #273326 Posted June 18, 2009 at 12:07 PM ok ok, leva a bicicleta 😛 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 Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now