SQL:根据属性顺序对行进行排序

时间:2018-12-04 16:21:07

标签: sql sql-server database tsql

我想将一个属性的值(称为position)排序到另一个属性顺序的行号。

示例:如果我具有以下属性:位置,点 我想按点对表进行排序(降序),然后为position分配有序的行号,例如。

Position --- Points

1 ------------ 99

2 ------------ 97

3 ------------ 81

etc..

3 个答案:

答案 0 :(得分:0)

您可以使用窗口函数row_number()

由于OP要更新记录

with data
  as (
    select row_number() over(order by points desc) as rnk_position
           ,position
           ,points
      from leagueParticipantView /* Is this a view or a table*/
     where leagueName LIKE &leagueName
     )
update data
   set position = rnk_position

答案 1 :(得分:0)

您只是想要row_number()还是rank()

select row_number() over (order by points desc) as position, points
from t
order by position;

答案 2 :(得分:0)

要获得所需的排名或位置,只需使用RANK()函数,如下所示:

create table #MyTable (Position int,  Points int)
insert into #MyTable values (0, 99),(0, 97),(0, 89)

SELECT #MyTable.Points,  RANK ()  OVER( ORDER BY Points desc) AS Position
FROM #MyTable

输出将如下所示

Points  Position
99      1
97      2
89      3

您可以将其用于内部联接的更新中,该联接具有原始表和具有rank函数的表,如下所示。

UPDATE A    
  SET A.Position = B.Position
from #MyTable A
  INNER JOIN (SELECT #MyTable.Points,  RANK ()  OVER( ORDER BY Points desc) AS Position
FROM #MyTable) B ON A.Points = B.Points

更新后,您可以使用select语句获取如下所示的更新位置

SELECT * FROM #MyTable

Position    Points
1           99
2           97
3           89
drop table #MyTable. 

希望这会对您有所帮助。