在 Oracle 中基于 ROWID 交换同一表的两行



我有一个表格duty_rota。其中有以下示例数据集。

Rowid  duty_date   duty_type  duty_officer
   AA1    01-JAN-00    1             48
   AA2    02-JAN-00    3              5

现在我可以检索 Rowid 并在此处交换日期。在我的条件下,应该有吵闹。

Rowid  duty_date   duty_type  duty_officer
       AA1    02-JAN-00    1             48
       AA2    01-JAN-00    3              5

有人可以帮我吗,我如何通过 Oracle 中的 SQL 查询来实现这一点。

可以使用 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 
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更熟悉。

最新更新