我有这个一个SQLselect a.b, '业务量', a.ALL_CITY, a.CITYA, a.CITYB, a.CITYC, '124'
  from (select   rownum w,
               to_char(add_months(sysdate, -1), 'yyyyMM') b,
               '业务量',
               ALL_CITY - lag(ALL_CITY, 1, 0) over(order by acct_type) ALL_CITY,
               CITYA - lag(CITYA, 1, 0) over(order by acct_type) CITYA,
               CITYB - lag(CITYB, 1, 0) over(order by acct_type) CITYB
          from fp_jq_db
         where ZBDM = 'JF1400'
           and acct_type in (to_char(add_months(sysdate, -1), 'yyyyMM'),
                to_char(add_months(sysdate, -2), 'yyyyMM'))) a
 where a.w = '2'其中 ACCT_TYPE 取的是 前两月 。按理 说 加了 order by acct_type  最后 正常的结果应该是 两条记录 第一条为 acct_type =to_char(add_months(sysdate, -1), 'yyyyMM') 的记录第二条为 相减的记录  相减的记录 ROWNUM为2,所以我加了条件只取相减记录的
可是 实际结果 却相反,rownum 为2的成了 acct_type =to_char(add_months(sysdate, -1), 'yyyyMM')  的 记录这个问题不知该如何解决,麻烦各位前辈指教下。谢谢

解决方案 »

  1.   


    --内部再嵌套一层排好序的试试:
    select a.b, '业务量', a.ALL_CITY, a.CITYA, a.CITYB, a.CITYC, '124' from 
    (select rownum w,
            to_char(add_months(sysdate, -1), 'yyyyMM') b,
            '业务量',
            ALL_CITY - lag(ALL_CITY, 1, 0) over(order by acct_type) ALL_CITY,
            CITYA - lag(CITYA, 1, 0) over(order by acct_type) CITYA,
            CITYB - lag(CITYB, 1, 0) over(order by acct_type) CITYB
     from (
          select * from fp_jq_db
          where ZBDM = 'JF1400'
          and acct_type in (to_char(add_months(sysdate, -1), 'yyyyMM'),
              to_char(add_months(sysdate, -2), 'yyyyMM'))
          order by acct_type
     )
    ) a
    where a.w = '2'