根据Oracle中的ROWID交换同一个表的两行

时间:2013-11-06 14:00:12

标签: sql oracle logic

我有一张表duty_rota。其中包含以下示例数据集。

Rowid  duty_date   duty_type  duty_officer

   AA1    01-JAN-00    1             48
   AA2    02-JAN-00    3              5

现在我可以检索Rowid并在此处交换日期。在我的情况下应该有rowid。

Rowid  duty_date   duty_type  duty_officer

       AA1    02-JAN-00    1             48
       AA2    01-JAN-00    3              5

有人可以帮助我,我怎么能通过oracle中的SQL查询实现这一点。

2 个答案:

答案 0 :(得分:3)

您可以使用merge语句在一个sql命令中交换两行之间的值:

merge into duty_rota d
using (select * from duty_rota ) s
on ((d.rowid = 'AA1' and s.rowid = 'AA2') or (d.rowid = 'AA2' and s.rowid = 'AA1'))
when matched then update set d.duty_date = s.duty_date 

答案 1 :(得分:0)

DECLARE @temp_date DATE

SET @temp_date = NULL

SELECT duty_date FROM duty_rota WHERE ROWID = 'AA1' INTO @temp_date

UPDATE duty_rota 
SET duty_date = (SELECT duty_date FROM duty_rota WHERE ROWID = 'AA2')
WHERE ROWID = 'AA1'

UPDATE duty_rota 
SET duty_date = @temp_date
WHERE ROWID = 'AA2'

或类似的东西,虽然我对MySQL和SQL Server更熟悉。