我有两列,A和B: A有一些主键ID:
A B
_ _ _ _ _ _ _ _ _ _
DCS000111 Null
DCS000112 Null
DCS000113 Null
DCS000115 Null
DCS000119 Null我想有一个脚本,可以迭代通过表和填充的null值
[1, 2, 3]如下所示:
A B
_ _ _ _ _ _ _ _ _ _
DCS000111 1
DCS000112 2
DCS000113 3
DCS000115 1
DCS000119 2提前谢谢。
我知道将B列中的值替换为单个值的脚本,但不确定是否使用此方法。
发布于 2017-03-28 09:44:28
您可以使用以下命令在select中赋值:
select a, mod(row_number() over (order by a) - 1, 3) + 1 as b
from t;在Oracle中进行更新是一件很痛苦的事情。您可以使用merge
merge into t using
(select a, mod(row_number() over (order by a) - 1, 3) + 1 as b
from t
) tt
on t.a = tt.a
when matched then update set t.b = tt.b;发布于 2017-03-28 09:38:31
查看NTILE函数。
http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions101.htm
只需根据您的分区和排序要求进行应用,并形成一条UPDATE语句。
update MyTable
set B=t from
(
select
NTILE(3) over (order by A) as t from MyTable
) as z发布于 2017-03-28 15:06:15
如果您不关心1、2、3的顺序(并且给定表记录的任何程度的更改,您为什么还要关心它呢?)这只是一个问题:
update your_table
set b = mod(rownum,3)+1
/ https://stackoverflow.com/questions/43059173
复制相似问题