select * from ( 
select rownum rm,t.assets_id,t.asset_name,t.spec,
(case when t.state !='4' then t.EHICLE_TYPE else t.state  end) as state  
from t_assets t left join t_assets_property_value p on t.assets_id=p.assets_id 
where  t.asset_tag like '001003104%'  
group by t.assets_id,t.asset_name,t.spec,state,t.EHICLE_TYPE,rownum  
)violation 
where rownum<=20 and rm>=40 
这样分页不起做用...数据不会变.
我试了下是group rownum 的原因不知有什么解决方法没有?

解决方案 »

  1.   

    select * 
      from ( select a.*, rownum rnum
               from ( SELECT .... FROM .... ORDER BY) a
              where rownum <= :MAX_ROWS )
    where rnum >= :MIN_ROWS
      

  2.   

    select * from ( 
    select rownum rm,t.assets_id,t.asset_name,t.spec,
    (case when t.state !='4' then t.EHICLE_TYPE else t.state  end) as state  
    from t_assets t left join t_assets_property_value p on t.assets_id=p.assets_id 
    where  t.asset_tag like '001003104%'  
    group by t.assets_id,t.asset_name,t.spec,state,t.EHICLE_TYPE,rownum  
    )violation 
    where rm between 20 and 40
      

  3.   

    select * from ( 
    select rownum rm,t.assets_id,t.asset_name,t.spec,
    (case when t.state !='4' then t.EHICLE_TYPE else t.state  end) as state  
    from t_assets t left join t_assets_property_value p on t.assets_id=p.assets_id 
    where  t.asset_tag like '001003104%' rownum<=40
    )violation 
    where rm>=20 
      

  4.   

    with t1 as (select t.assets_id,t.asset_name,t.spec,
    (case when t.state !='4' then t.EHICLE_TYPE else t.state end) as state   
    from t_assets t left join t_assets_property_value p on t.assets_id=p.assets_id  
    where t.asset_tag like '001003104%'   
    group by t.assets_id,t.asset_name,t.spec,state,t.EHICLE_TYPE
    ),t2 as (select rownum rn ,assets_id,asset_name,spec,state from t1 )
    select * from t2 where rn between 20 and 40;内层的group by 有问题. 大于小于取得值也不对.
      

  5.   

    group by我是为了去重复的所以不能去掉
      

  6.   

    去重的话不要加上rownum,执行不报错?
      

  7.   

    额,看到了.rownum你也加到group by后面了,可是这样就去不了重了
    SQL> select deptno,rownum from emp group by deptno,rownum;
     
    DEPTNO     ROWNUM
    ------ ----------
        10          7
        10          9
        10         14
        20          1
        20          4
        20          8
        20         11
        20         13
        30          2
        30          3
        30          5
        30          6
        30         10
        30         12
     
    14 rows selected
     
    SQL> 
      

  8.   

    select assets_id,asset_name,spec,state
    from
    (select assets_id,asset_name,spec,state,rownum rn
    from (  
    select t.assets_id,t.asset_name,t.spec,
    (case when t.state !='4' then t.EHICLE_TYPE else t.state end) as state   
    from t_assets t left join t_assets_property_value p on t.assets_id=p.assets_id  
    where t.asset_tag like '001003104%' 
    group by t.assets_id,t.asset_name,t.spec,state,t.EHICLE_TYPE
    ) a 
    where rownum<=40) k
    where k.rn>=20