1

我有一个表格,其中包含每个用户的注释,如下所示:

user_id    note_id
-------    -------
      1       1232
      1       1246
      1       1223
      2       3342
      2       2134
      3       3212
      3       1243
    ...        ...

现在我想实现一个排序机制,它允许用户以用户指定的方式排列这些注释,以便最终表格看起来像这样:

user_id    note_id  note_order
-------    -------  ----------
      1       1232          1
      1       1246          2
      1       1223          3
      2       3342          1
      2       2134          2
      3       3212          1
      3       1243          2
    ...        ...        ...

当然,在添加此列之后,它具有 NULL 值,并且不允许我在数据库中创建更多序列。ORACLE 中有什么方法可以实现这个目标吗?

我希望 order 列中的值从 1 开始到每个用户的注释数,并且最好在一个更新语句中执行此操作。如果以这种方式不可能,那么 PL/SQL 循环的最佳构造是什么,或者有没有其他有效的方法可以做到这一点?

期待任何可能的帮助。

4

1 回答 1

5

您不需要存储此值,您可以在检索期间简单地生成它。

select user_id,
       note_id,
       row_number() over (partition by user_id order by note_id)
from your_table

如果你真的需要更新表,你可以这样做:

merge into your_table ut
using (
  select rowid, 
         row_number() over (partition by user_id order by note_id) as rn
  from your_table
) t on (ut.rowid = t.rowid)
when matched then update
  set order_column = rn;

请注意,您不能创建列order,因为这是保留字(实际上您可以使用双引号,但我强烈建议不要这样做)。

于 2012-06-11T10:23:38.940 回答