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个值得差值请高人们指点......

解决方案 »

  1.   

    不知道是不是想要这样滴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
      

  2.   

    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(+)
      

  3.   

    -- 两种方法:其结果应该一样!(因为你是用的内连接: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;
      

  4.   

    --连接查询和之差  
    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
      

  5.   

    -- 那可以用中间表D 作为主表,A、B表分别 left join Dwith 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;