Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使用ROW_NUMBER()通过子查询进行更新查询?_Sql_Oracle_Subquery - Fatal编程技术网

Sql 使用ROW_NUMBER()通过子查询进行更新查询?

Sql 使用ROW_NUMBER()通过子查询进行更新查询?,sql,oracle,subquery,Sql,Oracle,Subquery,此查询不工作错误:01427。00000-单行子查询返回多行: 这个选择非常有效。我想以相同的顺序复制sequence\u day\u job列的行数值 更新10/09/2015 01-更新尝试完成类似的任务,但没有成功,如果临时表可以解决我的问题?对于临时表的使用来说,这似乎是相对简单的事情,cmo将是一个反复出现的问题,因为它认为临时表的使用并没有那么有趣 UPDATE table_name SET sequence_day_job = ( SELECT ROW_NUMBER() OVE

此查询不工作错误:01427。00000-单行子查询返回多行:

这个选择非常有效。我想以相同的顺序复制sequence\u day\u job列的行数值

更新10/09/2015 01-更新尝试完成类似的任务,但没有成功,如果临时表可以解决我的问题?对于临时表的使用来说,这似乎是相对简单的事情,cmo将是一个反复出现的问题,因为它认为临时表的使用并没有那么有趣

 UPDATE table_name SET sequence_day_job = (
 SELECT ROW_NUMBER() OVER (PARTITION BY column_person_id ORDER BY column_day_job)  
       FROM PC_COMENTARIO )xx
其中,列_person _id=808;
//错误:01427。00000-单行子查询返回多行

为什么需要子查询。这不管用吗:

UPDATE table_name
SET column_update = column_day_job
更新-我想你需要这样的东西。语法可能不正确,但我认为您需要创建一个具有所需行号的虚拟表&然后选择正确的行。如果该表中的日期是唯一的,则可以使用这些日期

UPDATE table_name t1 SET column_update =( 
  SELECT t1.rownum
  from (select ROW_NUMBER() from table_name t2) t3
  where t3.seq_day_job = t1.seq_day_job
) WHERE column_pearson_id = 808;
这应该起作用:

MERGE INTO table_name t
USING ( SELECT rowid rid, row_number() OVER (order by sequence_job_day) rn FROM table_name ) u
ON ( t.rowid = u.rid AND t.column_pearson_id = 888 )
WHEN MATCHED THEN UPDATE SET t.column_update = u.rn;

注意-列_update在表中的所有行中都是唯一的。如果您只希望每个人都有一个唯一的排序,则需要按列\u pearson\u id进行分区。此外,还可以将=888条件放在USING子句中,并将其从MATCH子句中删除。

尽管知道什么不起作用很有意思,但如果您需要帮助使其起作用,您能说明它应该做什么吗?“column\u day\u job”不是表的物理列。史密斯先生,这是排号的结果。我需要捕捉行数的值,以便以有序的方式更新添加了额外图像的列。我现在明白了。但是我认为子查询是错误的?您只需要从该子查询返回一行。请查看我的更新以获取帮助。。但是你需要使用订单。我做这项工作只是为了对另一列中的valroes进行数字排序。在本例中,我使用了select分区,但在您的示例中,我会使用partition by吗?我把?按t划分的行号。按顺序排列的列号。按顺序排列的id。工作日。我必须删除此人的标识符别名,因为他出错了,然后工作了,谢谢
UPDATE table_name t1 SET column_update =( 
  SELECT t1.rownum
  from (select ROW_NUMBER() from table_name t2) t3
  where t3.seq_day_job = t1.seq_day_job
) WHERE column_pearson_id = 808;
MERGE INTO table_name t
USING ( SELECT rowid rid, row_number() OVER (order by sequence_job_day) rn FROM table_name ) u
ON ( t.rowid = u.rid AND t.column_pearson_id = 888 )
WHEN MATCHED THEN UPDATE SET t.column_update = u.rn;