Перенумеровать (установить столбец в ранг) столбец после заказа по этому столбцу
В sql, я хочу сделать что-то вроде
update table set col = rank(col) order by col
Как мне это сделать?
Цель:
в настоящее время у col есть экстремальные значения, такие как -14000, 23, 4000, 23000 ... они используются в asc, desc sort, но когда я строю их на слайдере, скажем, с 10 позициями, каждая позиция слайдера имеет сильно неровные данные, поэтому чтобы выровнять это, я хочу изменить нумерацию столбцов,
-14000 becomes 0
23 becomes 1
4000 becomes 2
и так далее
2 ответа
Решение
Использовал это:
update table set col = (select count(*) from (select col from table) as temptable where temptable.col <table.col );
В SQL Server вы можете использовать два подзапроса и ROW_NUMBER
функция. В тех случаях, когда у вас есть дубликаты в col
рейтинг будет соответствовать стандартному рейтингу соревнований.
Пример скрипта:
SELECT * INTO #TABLE
FROM
(
select -14000 col
union all SELECT 23
union all select 4000
union all SELECT 23 --sample duplicated data
) Unioned
UPDATE #TABLE
SET col =
(
SELECT top 1 rowNum
FROM
(
SELECT
col
, row_number() OVER (order by col) - 1 rowNum --starts at 0 rank
FROM #TABLE
) MySubQuery
WHERE MySubQuery.col = #TABLE.col
)