select * , 区域排名 = (select count(1) from tb where 地区 = t.地区 and  数量 > t.数量) + 1 from tb t order by 地区,区域排名

解决方案 »

  1.   

    create table tb(地区 varchar(10) , 数量 int)
    insert into tb values('北京' ,1000) 
    insert into tb values('北京' ,900 )
    insert into tb values('北京' ,1200) 
    insert into tb values('上海' ,1500) 
    insert into tb values('上海' ,2500) 
    insert into tb values('上海' ,500 )
    insert into tb values('广州' ,2000) 
    insert into tb values('广州' ,1200)
    goselect * , 区域排名 = (select count(1) from tb where 地区 = t.地区 and  数量 > t.数量) + 1 from tb t order by 地区,区域排名drop table tb /*
    地区         数量          区域排名        
    ---------- ----------- ----------- 
    北京         1200        1
    北京         1000        2
    北京         900         3
    广州         2000        1
    广州         1200        2
    上海         2500        1
    上海         1500        2
    上海         500         3(所影响的行数为 8 行)
    */
      

  2.   

    --如果是sql 2005
    select * , 区域排名 = row_number() over(partition by 地区 order by 数量 desc) from tb