我有一张表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查询实现这一点。
答案 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更熟悉。