2011-03-09 49 views
0

假设我有match_id是否可以在SQL中进行以下转换?

1,1,2,2,3,3以下值...

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

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

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

firstvalue * 2 - 1

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

secondvalue * 2

+0

而第3个值?这个规则对我来说还不清楚。 – CloudyMarble 2011-03-09 05:47:54

+0

这些值是否在单独的行中? – 2011-03-09 05:48:27

+1

未来请在后期或标签中添加RDMS引擎。谢谢! – mellamokb 2011-03-09 05:57:18

回答

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 
+0

OP必须记住,这在有限数量的RDBMS中起作用。这至少在Oracle和Postgresql上起作用,但不在MySQL,HSQLDB等上(据我所知) – 2011-03-09 05:55:35

+0

是否有类似的版本使用update而不是select? – deltanovember 2011-03-09 05:59:50

0

对于一个纯粹的序列编号,这会做

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