select name,
  score,
  case when score >= 70 then 1 else rank() over(order by score asc) + count(score >=70) end rank
from t1
order by rank;有没有方法把直接count(score >=70)写在select里http://topic.csdn.net/u/20120605/15/e57105b3-1755-4b3f-a37b-7f5f9347538d.html
在我结贴后发现还有问题总结:
满足条件的全部排名为 1 ,剩下的排名是在排名第一的个数为基础,后面依次+1
如:CC EE FF三个都排名第一,剩下的排名应该从4开始

解决方案 »

  1.   

    select name, score, rank() over(order by score2 asc) as rank
      from (select name,
                   score,
                   case
                     when score >= 70 then
                      100
                     else
                      score
                   end as score2
              from t1)
     order by rank;
      

  2.   

    这里的的score没有限制的,可能是200,300,我不知道是多少
      

  3.   

    那很简单把100改成999999应该可以吧 根据最大的score值来确定一下
      

  4.   

    如果条件是 score <= 70 或者是  score >= 70 and score <= 80 
    排序方式desc和asc都是都不是固定的,不能把条件写死了
      

  5.   

    再次确定一下需求:
    1、条件范围内的记录排名都为1;
    2、条件范围外的记录根据排序方式(asc、desc)进行排序,排序起始值为 条件范围内记录和+1;