假设我有match_id是否可以在SQL中进行以下转换?
1,1,2,2,3,3以下值...
是否可以使用SQL转换为以下值
1, 1,2,3,4,5,6 ...
换句话说,按顺序列出所有match_id。对于第一个值执行以下操作
firstvalue * 2 - 1
对于第二个值执行以下操作
secondvalue * 2
假设我有match_id是否可以在SQL中进行以下转换?
1,1,2,2,3,3以下值...
是否可以使用SQL转换为以下值
1, 1,2,3,4,5,6 ...
换句话说,按顺序列出所有match_id。对于第一个值执行以下操作
firstvalue * 2 - 1
对于第二个值执行以下操作
secondvalue * 2
编辑:这是对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
OP必须记住,这在有限数量的RDBMS中起作用。这至少在Oracle和Postgresql上起作用,但不在MySQL,HSQLDB等上(据我所知) – 2011-03-09 05:55:35
是否有类似的版本使用update而不是select? – deltanovember 2011-03-09 05:59:50
对于一个纯粹的序列编号,这会做
;with TMP as (
select *, row_number() over (order by match_id) rownum
from myTable)
UPDATE TMP
SET match_id = rownum
而第3个值?这个规则对我来说还不清楚。 – CloudyMarble 2011-03-09 05:47:54
这些值是否在单独的行中? – 2011-03-09 05:48:27
未来请在后期或标签中添加RDMS引擎。谢谢! – mellamokb 2011-03-09 05:57:18