oracle SQL 求和 问题

来源:百度知道 编辑:UC知道 时间:2024/05/12 15:24:35
select sum(decode(a.real_type,'g',1,0))+sum(decode(c.real_type,'g',1,0))
from T1 a,T2 c,T3 d
where c.status=1 and a.agent_id=d.itemid and d.status=1;

//结果为10,不正确,如果把两个分开的话

select sum(decode(a.real_type,'g',1,0))
from T1 a,T3 d
where a.agent_id=d.itemid and d.status=1;
//结果为2,正确
select sum(decode(c.real_type,'g',1,0))
from T2 c
where c.status=1;
//结果为0,正确。。。所以上述两项加和应该为2

为什么第一种写法想把两项加起来就不行呢?请高手指点,谢谢。
想把两项加和一下子得到结果怎么做呢??

结果都是正确。只是你写的语句没有发达到你想要的效果而已。

你写了三个SQL我叫它们SQL1,SQL2,SQL3好了。SQL1里面并没有把T2表和T1、T3表关联起来。如果T2和T1、T3不存在什么关系的话,你只能用SQL2,SQL3分开查询,最后嵌套一个SELECT 把它们二个字查询的结果加起来。

你看看
select sum(decode(a.real_type,'g',1,0))
from T1 a,T2 c,T3 d
where c.status=1 and a.agent_id=d.itemid and d.status=1;

select sum(decode(a.real_type,'g',1,0))
from T1 a,T3 d
where a.agent_id=d.itemid and d.status=1;

的结果有什么不一样?我想你可以想到一些东西。

前面的语句中T2 c表和T1 a,T3 d 没有关联。只有一个c.status=1 。也就是说他们没有什么关系。你把他放到一起结果就是他们的笛卡尔积。

拿你这20分可以让我气的吐血,用个嵌套不就出来了吗?!!!!最后一次回答了。

select sum(a1) (
select sum(decode(a.real_type, 'g', 1, 0)) as a1,

from T1 a, T3 d
where a.agent_id = d.itemid
and d.status = 1;

union all

select sum(decode(c.real_type, 'g', 1, 0)) as a1,

from T2 c
where c.status = 1 );