select * 
from(
select b.*,p.*,row_number()over(order by b.datetime desc) rn from t_bss_product_key_info p,t_bss_bill_key b where p.Product=b.Product(+) 
and p.id=b.keyNo(+) and p.id in(7,24,35)
order by b.datetime desc)
where rn between 20 and 30;

解决方案 »

  1.   

    WITH Y AS (
        SELECT B.*,P.*,ROW_NUMBER()OVER(ORDER BY B.DATETIME DESC) RN 
        FROM T_BSS_PRODUCT_KEY_INFO P,T_BSS_BILL_KEY B 
        WHERE P.PRODUCT=B.PRODUCT(+) 
        AND P.ID=B.KEYNO(+) 
        AND P.ID IN(7,24,35)
    )
    SELECT Y.*
    FROM Y
    WHERE Y.RN BETWEEN 20 AND 30楼上的回复也应该是正解
      

  2.   

    to:sbaz(万神渡劫) 
    我用你的显示  column ambiguously defined  字段定义模糊
    我也不知道怎么弄  我把表结构给你:
    -----------t_bss_bill_key-------------
    wirecorp   product  channle   datetime   timesum   usersum   avgtime   keyno-----------t_bss_product_key_info-------------
    wirecorp   product   key   introduce    id   channle
      

  3.   

    光标停在      
          ↓
    select *
    from(
    select b.*,p.*,row_number()over(order by b.datetime desc) rn from t_bss_product_key_info p,t_bss_bill_key b where p.Product=b.Product(+) 
    and p.id=b.keyNo(+) and p.id in(7,24,35)
    order by b.datetime desc)
    where rn between 20 and 30;
      

  4.   

    这是因为 t_bss_bill_key t_bss_product_key_info两种表的字段重名的缘故你不要使用 b.*  p.* 改用具体的字段名,并对重名的字段取个不同的别名就好了比如
    select *
    from(
    select b.wirecorp b_wriecorp,b.datetime,p.wirecorp p_wirecorp,p.channle,row_number()over(order by b.datetime desc) rn from t_bss_product_key_info p,t_bss_bill_key b where p.Product=b.Product(+) 
    and p.id=b.keyNo(+) and p.id in(7,24,35)
    order by b.datetime desc)
    where rn between 20 and 30;