我有一个表格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更熟悉。