日期:2014-05-16 浏览次数:20896 次
create table t1 (name varchar2(10),score number(3)); insert into t1 values ('AA',67); insert into t1 values ('BB',85); insert into t1 values ('CC',98); insert into t1 values ('DD',58); insert into t1 values ('EE',72); insert into t1 values ('FF',83); insert into t1 values ('GG',47); commit; select name, score, case when score >= 70 then 1 else rank() over(order by score desc) end rank from t1 order by name name score rank -------------------------------- 1 AA 67 5 2 BB 85 1 3 CC 98 1 4 DD 58 6 5 EE 72 1 6 FF 83 1 7 GG 47 7
------解决方案--------------------
菜鸟一只,完全不懂楼主意思!楼上或者楼主帮忙解答下,楼主这是在做的什么?要求呢?
------解决方案--------------------
老是搞这些小技巧。能帮我想想怎么玩转10亿条记录么
------解决方案--------------------
SELECT t.*, RANK() OVER(ORDER BY CASE WHEN t.score >= 70 AND t.score <= 85 THEN NULL ELSE t.score END DESC) FROM tb t
------解决方案--------------------
好像没说清楚, < 70 的那些,怎么排?
是从 1 开始,从 2 开始,还是 从上面那些个数之后 开始?
------解决方案--------------------
用动态SQL不就得了,想怎么拼就怎么拼SQL
------解决方案--------------------
4楼正解了 还啥议论的 都看看把