• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

charlie69

juntar duas querys

11 mensagens neste tópico

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?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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;

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

é igual a primeira query que apresentei, mas com Custos.Valor em vez do Custos.*

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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;

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

multiplas tabelas na clausula FROM é muito propensa a erros.

[citation needed]

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora