是否可以在SQL中执行以下转换?

时间:2011-03-09 05:44:23

标签: sql

假设我有match_id

的以下值

1,1,2,2,3,3 ......

是否可以使用SQL转换为以下值

1,2,3,4,5,6 ...

换句话说,按顺序列出所有match_id。对于第一个值,执行以下操作

firstvalue * 2 - 1

对于第二个值,执行以下操作

secondvalue * 2

2 个答案:

答案 0 :(得分:3)

编辑:这是为SQL Server编写的。

select
    case when (row_number() over (order by match_id)) % 2 = 1
         then match_id * 2 - 1
         else match_id * 2
    end as output_value
from
    myTable

编辑2 要更新行,您可以使用以下内容:

update
    T
set match_id =
    case when RowNumber % 2 = 1
         then match_id * 2 - 1
         else match_id * 2
    end
from
    (select
        *,
        (row_number() over (order by match_id)) as RowNumber
    from myTable) T

答案 1 :(得分:0)

对于纯序列编号,这样做

;with TMP as (
    select *, row_number() over (order by match_id) rownum
    from myTable)
UPDATE TMP
SET match_id = rownum