SQL: сортировка строк по порядку атрибутов - PullRequest
0 голосов
/ 04 декабря 2018

Я хочу отсортировать значение атрибута (называемое position) по номеру строки порядка другого атрибута.

Пример: если у меня есть следующие атрибуты: позиция, точки, которые я хотел быупорядочить таблицу по точкам (по убыванию), затем присвоить position порядковые номера строк, например

Position --- Points

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

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

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

etc..

Ответы [ 3 ]

0 голосов
/ 04 декабря 2018

Вы просто хотите row_number() или rank()?

select row_number() over (order by points desc) as position, points
from t
order by position;
0 голосов
/ 04 декабря 2018

Чтобы получить ранг или должность, как вам нужно, вы можете просто использовать функцию 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

Вы можете использовать его в обновлении с внутренним объединением с исходной таблицей и таблицей с функцией ранга, как показано ниже.

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 * FROM #MyTable

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

Надеюсь, это поможет вам.

0 голосов
/ 04 декабря 2018

Вы можете сделать это, используя оконные функции row_number ()

Поскольку ОП хочет обновить записи

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...