我的桌子看起来像这样:
* user_id index
1 1 (null)
2 2 (null)
3 2 (null)
4 2 (null)
5 3 (null)
6 3 (null)
我需要设置索引列,以便每个用户都有序列号:
* user_id index
1 1 1
2 2 1
3 2 2
4 2 3
5 3 1
6 3 2
我试过这样的事情
create sequence my_seq;
UPDATE my_table SET index=my_seq.nextval WHERE USER_ID=3;
但显然我不能为每个ID执行此操作。有没有办法为所有记录执行此操作?
感谢。
答案 0 :(得分:4)
您可以将MERGE
语句与ROW_NUMBER
分析函数一起使用:
MERGE INTO my_table dst
USING (
SELECT ROWID rid,
ROW_NUMBER() OVER ( PARTITION BY user_id
ORDER BY /*Your order condition*/ ROWNUM ) AS rn
FROM my_table
) src
ON ( dst.ROWID = src.rid )
WHEN MATCHED THEN
UPDATE SET "index" = src.rn WHERE "index" IS NULL;