我的表格包含每个用户的注释,如下所示:
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循环的最佳构造,还是有其他有效的方法来做到这一点?
期待任何可能的帮助。
答案 0 :(得分: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
,因为这是一个保留字(实际上您可以使用双引号,但我强烈建议您不要这样做。)