我有一个包含user_id
,user_name
,rec
列的表。我有另一列作为ID。我想填充ID如下。
| 用户名|接收ID| rec ID |
| --|--| ------------ |
| ABC|记录1| rec 1 |
| ABC| rec11| rec1 1 |
| BCD| Rec2 2| rec2 2 |
| BCD| Rec3 2| rec3 2 |
| XYZ| rec11| rec1 1 |
我不确定这是否可能,首先它需要找到唯一的user_id
和它的出现次数,然后根据出现次数将1分配给n,但对于user_id
,如果有多个记录具有相同的user_name
,则两行都应该使用相同的id更新。
以前,这是通过使用user_id
作为分区的row_number()
实现的,其中id将基于user_id
的出现给予1到n。(感谢@MTO)
UPDATE table dst
SET id = (
SELECT seq
FROM (
SELECT row_number() over (partition by user_id order by user_id) as seq
FROM test_csv
) src
WHERE src.ROWID = dst.ROWID
);
字符串
1条答案
按热度按时间sz81bmfz1#
使用
DENSE_RANK
而不是ROW_NUMBER
:字符串
或者,使用
MERGE
:型
其中,对于样本数据:
型
然后在
UPDATE
或MERGE
之后,该表包含:| 用户名|REC|识别码| ID |
| --|--|--| ------------ |
| ABC|雷克|一个| 1 |
| ABC| rec1|一个| 1 |
| BCD| rec2|二个| 2 |
| BCD| rec3|二个| 2 |
| XYZ| rec1|一个| 1 |
fiddle