0

在 sql 中,我想做类似的事情

update table set col = rank(col) order by col

我该怎么做呢 ?

目的 :

目前 col 具有极值,例如 -14000、23、4000、23000 ...它们用于 asc、desc 排序但是当我将它们绘制在滑块上时,例如 10 个位置,每个滑块位置的数据非常不均匀,所以为了平衡它,我希望重新编号该列,

-14000 becomes 0
23 becomes 1
4000 becomes 2

等等

4

2 回答 2

3

用这个:

update table set col = (select count(*) from (select col from table) as temptable where temptable.col <table.col );
于 2012-01-24T23:11:17.733 回答
0

在 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
)
于 2012-01-22T23:56:07.353 回答