SQL
21/05/2003
0
tenho o seguinte SQL:
select e.nome,
sum (r.valor)as recursos,
sum (g.valor) as Gastos,
sum (r.valor-g.valor)as Saldo
from recurso r, equipe e, gasto g
where((e.cod_equipe = r.cod_equipe)
and (e.cod_equipe = g.cod_equipe)
and (r.cod_equipe = g.cod_equipe))
and (e.cod_equipe=19)
group by e.nome;
O problema é que não esta mostrando a somatória correta, a somátoria é sempre superior, acredito que esteja selecionando mais várias vezes o mesmo valor.
A sintese da tabela é seguinte:
CREATE TABLE ´GASTO´
(
´COD_GASTO´INTEGER NOT NULL,
´COD_EQUIPE´INTEGER NOT NULL,
´VALOR´NUMERIC(8, 2),
´NOME´VARCHAR(80),
´DES´VARCHAR(150),
´OBS´VARCHAR(150),
´TIPO´VARCHAR(60),
´DATA´TIMESTAMP,
PRIMARY KEY (´COD_GASTO´)
);
ALTER TABLE ´GASTO´ ADD FOREIGN KEY (´COD_EQUIPE´) REFERENCES EQUIPE (´COD_EQUIPE´);
A table recursos é parecida com esta
e a tabela equipe é a tabela pai
Alguém sabe como posso corrigir este erro?
Desde já Obrigada
Quel
Posts
21/05/2003
Flavio Sanches
pra resolver isso vc tem que usar o tal do alter join
consulte o help do banco que vc utiliza pra saber como ele faz isso. No caso do SQL Server é assim:
where((e.cod_equipe =* r.cod_equipe)
por exemplo.
Nesse caso, se a equipe não tiver código cadastrado na tabela r ele traz um registro vazio
21/05/2003
Adilsond
select g.nome,
sum(r.valor)as recursos,
sum(g.valor) as Gastos,
sum(r.valor-g.valor) as Saldo
from gasto g,
recurso r
where (r.cod_equipe = g.cod_equipe)
and (g.cod_equipe = 19)
group by g.nome;
21/05/2003
Quel
Muito Obrigada pela ajuda
acredito que fazendo o join como o flávio falou dá certo, o problema é que eu uso Interbase e pelo jeito não aceita * no join, mas dá pra usar o Right Join que com duas tabelas ficaria assim:
SELECT E.NOME,
sum(r.valor)
FROM Equipe E right JOIN Recurso r
ON E.cod_equipe = r.cod_equipe
group BY E.NOME
Mas e com 3 tabelas? Alguém sabe como fazer?
Obrida de novo
Clique aqui para fazer login e interagir na Comunidade :)