перенумеровать (установить столбец в ранг) столбец после заказа по этому столбцу - PullRequest
0 голосов
/ 23 января 2012

в 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 ]

2 голосов
/ 25 января 2012

Использовано это:

update table set col = (select count(*) from (select col from table) as temptable where temptable.col <table.col );
0 голосов
/ 23 января 2012

В 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
)
...