select case when

背景:表中的一个状态字段,有三种值:0、1、2;数据需要按照0、2、1的顺序并且按照创建时间降序排列。

想改底层数据库中的值是不对滴。这个时候就需要在内存中做些改变了,比如使用case when then "变一下"。

还需要实现分页,这里用的是oracle数据库,所以使用rownum表示数据的行数。

你能看到>= 20表示按照排序查询的结果显示到第20行,> 10表示第11行;

如果你使用的是current和pageSize,就需要计算一下,start = (current - 1) * pageSize; end = current * pageSize

这条语句用于springdata jpa 中,需要在@Query里加上nativeQuery = true

SELECT *
  FROM (SELECT ROW_.*, ROWNUM ROWNUM_
          FROM (SELECT *
                  FROM TABLE1
                  ORDER BY CASE TRANS_STATUS 
                     WHEN 2 THEN 1 
                     WHEN 1 THEN 2
                     ELSE 0 END,  create_time DESC) ROW_
         WHERE ROWNUM <= 20)
 WHERE ROWNUM_ > 10;
上一篇:c – 在Ubuntu 14.04下与`libopencv_highgui.so`链接错误,与`libtiff.so.5的奇怪结果


下一篇:PDF转Image最终方案