用重复数据填充列

时间:2017-03-28 01:33:59

标签: sql oracle iteration

我有两列,A和B: A有一些主键ID:

Actions build = new Actions(driver);
                    build.moveToElement(sbmElement).build().perform();
                    driver.sleep(5000);

我想有一个脚本,可以遍历表并用

填充 A B _ _ _ _ _ _ _ _ _ _ DCS000111 Null DCS000112 Null DCS000113 Null DCS000115 Null DCS000119 Null
null

像这样:

[1, 2, 3]

先谢谢。

我知道使用单个值替换B列中的值的脚本,但不确定使用此方法。

4 个答案:

答案 0 :(得分:3)

您可以使用以下内容分配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;

答案 1 :(得分:0)

查看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

答案 2 :(得分:0)

如果您不关心1,2,3的顺序(并且您的表格记录有任何变化,您为什么会这样做?)这只是一个问题:

update your_table
set b = mod(rownum,3)+1
/ 

答案 3 :(得分:0)

我获取了原始表的副本,并创建了一个新表,使用1, 2, 3(Value1,Value2,Value3)信息填充/重新填充所需的列;然后使用MOD使用以下查询合并两个表。

INSERT INTO SELECT ColA,DECODE(MOD(rownum,3),0,'Value1',1,'Value2',2,'Value3')AS ColB FROM;