1

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

Rowid  duty_date   duty_type  duty_officer

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

现在我可以在这里检索 Rowid 和交换日期。在我的 where 条件下应该有 rowid。

Rowid  duty_date   duty_type  duty_officer

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

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

4

2 回答 2

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 
于 2013-11-06T14:30:26.907 回答
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。

于 2013-11-06T14:26:40.643 回答