Перенумеровать (установить столбец в ранг) столбец после заказа по этому столбцу

В 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
)
Другие вопросы по тегам