select sum(cargo_weight) 
from (select * from cg_agg_transit_lgt t where flight_dt between to_date('200809'||'01','yyyymmdd') and last_day(to_date('200809'||'30','yyyymmdd')) and trans_eng='PVG')上面是09月的cargo_weight的总重量,我想要09月的减08月的总重量,语句应该怎么写呢?难道是
select sum(cargo_weight) 
from (select * from cg_agg_transit_lgt t where flight_dt between to_date('200809'||'01','yyyymmdd') and last_day(to_date('200809'||'30','yyyymmdd')) and trans_eng='PVG')
-
select sum(cargo_weight) 
from (select * from cg_agg_transit_lgt t where flight_dt between to_date('200808'||'01','yyyymmdd') and last_day(to_date('200808'||'30','yyyymmdd')) and trans_eng='PVG')
么。有简单的么? 

解决方案 »

  1.   

    select (select sum(cargo_weight)
              from (select *
                      from cg_agg_transit_lgt t
                     where flight_dt between
                           to_date('200809' || '01', 'yyyymmdd') and
                           last_day(to_date('200809' || '30', 'yyyymmdd'))
                       and trans_eng = 'PVG') -
                    select sum(cargo_weight)
                      from (select *
                              from cg_agg_transit_lgt t
                             where flight_dt between
                                   to_date('200808' || '01', 'yyyymmdd') and
                                   last_day(to_date('200808' || '30', 'yyyymmdd'))
                               and trans_eng = 'PVG')
            )
      from dual
      

  2.   

    SELECT 
            SUM ( CASE WHEN FLIGHT_DT>=TO_DATE ( '20080901' , 'YYYY-MM-DD' ) AND FLIGHT_DT<=LAST_DAY ( TO_DATE ( '20080901' , 'YYYY-MM-DD' ) ) , CARGO_WIGHT , 0 END ) - 
            SUM ( CASE WHEN FLIGHT_DT>=TO_DATE ( '20080801' , 'YYYY-MM-DD' ) AND FLIGHT_DT<=LAST_DAY ( TO_DATE ( '20080801' , 'YYYY-MM-DD' ) ) , CARGO_WIGHT , 0 END ) 
    FROM 
            CG_AGG_TRANSIT_LGT 
    WHERE 
            TRANS_ENG='PVG'
      

  3.   

    TRY IT ..
    SELECT SUM(CASE
                 WHEN TO_CHAR(FLIGHT_DT, 'YYYYMM') = '200809' THEN
                  CARGO_WEIGHT
                 ELSE
                  0
               END) - SUM(CASE
                            WHEN TO_CHAR(FLIGHT_DT, 'YYYYMM') = '200808' THEN
                             CARGO_WEIGHT
                            ELSE
                             0
                          END)
      FROM CG_AGG_TRANSIT_LGT T
     WHERE TRANS_ENG = 'PVG';
      

  4.   

    或者用DECODE实现:
    SELECT SUM(DECODE(TO_CHAR(FLIGHT_DT, 'YYYYMM'), '200809', CARGO_WEIGHT, 0)) -
           SUM(DECODE(TO_CHAR(FLIGHT_DT, 'YYYYMM'), '200808', CARGO_WEIGHT, 0))
      FROM CG_AGG_TRANSIT_LGT T
     WHERE TRANS_ENG = 'PVG';