SQL

21/05/2003

1

OLá pessoal

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


Responder

Posts

21/05/2003

Flavio Sanches

Isso normalmente ocorre quendo vc tem registros que não tem correspondentes na outra tabela.
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


Responder

21/05/2003

Adilsond

Imagino que esteja duplicando a tabela equipe.

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;


Responder

21/05/2003

Quel

Olá pessoal

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


Responder
×
+1 DevUP
Acesso diário, +1 DevUP
Parabéns, você está investindo na sua carreira