+ -
当前位置:首页 → 问答吧 → 紧急求助数据相减的SQL!!!!

紧急求助数据相减的SQL!!!!

时间:2011-09-23

来源:互联网

select sum(f1.TAKEUP_CREDIT_AMT) from A f1,D t 
where f1.data_dt=t.date_key  
   
select sum(f1.CREDIT_AMT) from B f1,D t 
where f1.data_dt=t.date_key 

我现在想通过一条SQL获得这2个值得差值请高人们指点......


作者: toss3000   发布时间: 2011-09-23

不知道是不是想要这样滴。。。
SQL code

select (select sum(f1.TAKEUP_CREDIT_AMT) from A f1,D t  
where f1.data_dt=t.date_key )-
(select sum(f1.CREDIT_AMT) from B f1,D t  
where f1.data_dt=t.date_key) 差值
from dual

作者: cuihaiyang   发布时间: 2011-09-23

SQL code


SELECT SUM(f1.TAKEUP_CREDIT_AMT)-SUM(f1.CREDIT_AMT)
FROM A f1,B f2,D t
WHERE t.date_key=f1.data_dt(+)
AND     t.date_key=f2.data_dt(+)

作者: cosio   发布时间: 2011-09-23

SQL code
-- 两种方法:其结果应该一样!(因为你是用的内连接:where f1.data_dt=t.date_key)

-- 方法一:每条记录的两个字段相减,然后累加!(即:先相减,再累加)
select sum(f1.TAKEUP_CREDIT_AMT-f1.CREDIT_AMT) as sum1
from A f1,D t 
where f1.data_dt=t.date_key;

-- 方法二:先对两个字段分别求和,再相减!(即:先累加,再相减)
select sum(f1.TAKEUP_CREDIT_AMT)-sum(f1.CREDIT_AMT) as sum2
from A f1,D t 
where f1.data_dt=t.date_key;

作者: luoyoumou   发布时间: 2011-09-23

引用 3 楼 luoyoumou 的回复:

SQL code
-- 两种方法:其结果应该一样!(因为你是用的内连接:where f1.data_dt=t.date_key)

-- 方法一:每条记录的两个字段相减,然后累加!(即:先相减,再累加)
select sum(f1.TAKEUP_CREDIT_AMT-f1.CREDIT_AMT) as sum1
from A f1,D t
where f1.data_dt=t.date_ke……


-- 至于效率怎么样,需要看一下执行计划!

作者: luoyoumou   发布时间: 2011-09-23

引用 4 楼 luoyoumou 的回复:
引用 3 楼 luoyoumou 的回复:

SQL code
-- 两种方法:其结果应该一样!(因为你是用的内连接:where f1.data_dt=t.date_key)

-- 方法一:每条记录的两个字段相减,然后累加!(即:先相减,再累加)
select sum(f1.TAKEUP_CREDIT_AMT-f1.CREDIT_AMT) as sum1
from A f1,D t……


表不一样!一个是A,一个是B

作者: cosio   发布时间: 2011-09-23

SQL code
--连接查询和之差  
where f1.data_dt=t.date_key 
slect sum(f1.TAKEUP_CREDIT_AMT)-sum(f2.CREDIT_AMT) from A f1
left join D t on f1.data_dt=t.data_key
left join B f2 on f2.data_dt=t.data-key

作者: lzd_83   发布时间: 2011-09-23

引用 5 楼 cosio 的回复:

引用 4 楼 luoyoumou 的回复:
引用 3 楼 luoyoumou 的回复:

SQL code
-- 两种方法:其结果应该一样!(因为你是用的内连接:where f1.data_dt=t.date_key)

-- 方法一:每条记录的两个字段相减,然后累加!(即:先相减,再累加)
select sum(f1.TAKEUP_CREDIT_AMT-f1.CREDIT_AMT……



SQL code
-- 那可以用中间表D 作为主表,A、B表分别 left join D

with c as (select d.date_key,
                  nvl(a.TAKEUP_CREDIT_AMT,0) as TAKEUP_CREDIT_AMT,
                  nvl(b.CREDIT_AMT,0)        as CREDIT_AMT
           from d left join a on a.date_dt=d.date_key
                  left join b on b.date_dt=d.date_key )
select sum(c.TAKEUP_CREDIT_AMT-c.CREDIT_AMT) as sum1
from c;

with c as (select d.date_key,
                  nvl(a.TAKEUP_CREDIT_AMT,0) as TAKEUP_CREDIT_AMT,
                  nvl(b.CREDIT_AMT,0)        as CREDIT_AMT
           from d left join a on a.date_dt=d.date_key
                  left join b on b.date_dt=d.date_key )
select sum(c.TAKEUP_CREDIT_AMT)-sum(c.CREDIT_AMT) as sum2
from c;

作者: luoyoumou   发布时间: 2011-09-23

热门下载

更多