如何在MS Access中为表内含重复值的字段生成对应统一ID
实现enid字段自动填充的常用方法
根据你使用的工具不同,可选择对应的操作方案:
1. Excel/WPS 表格场景
- 方案A(提前去重匹配):
- 先将
en列去重后粘贴到空白列(比如D列,D1开始依次为apple、building、can、water) - 在
enid列首个数据单元格(假设表头在第1行,首个数据单元格为B2)输入公式:=MATCH(A2,$D$1:$D$4,0),下拉填充所有行即可,相同单词会匹配到同一编号
- 先将
- 方案B(无需额外去重列):
- 在
enid列首个数据单元格B2输入公式:=XLOOKUP(A2,$A$2:A2,$B$2:B2,MAX($B$2:B2)+1,0) - 直接下拉填充,公式会自动给首次出现的新单词分配递增编号,重复单词复用已有编号
- 在
2. SQL 数据库场景
假设你的表名为word_table,可通过关联去重后的编号列表更新字段:
-- 支持窗口函数的数据库(MySQL 8.0+/PostgreSQL/SQL Server等) UPDATE word_table t1 JOIN ( SELECT en, ROW_NUMBER() OVER (ORDER BY en) AS new_id FROM word_table GROUP BY en ) t2 ON t1.en = t2.en SET t1.enid = t2.new_id;
如果使用MySQL 5.7及以下不支持窗口函数的版本,可使用变量实现:
UPDATE word_table t1 JOIN ( SELECT en, @id := @id +1 AS new_id FROM (SELECT DISTINCT en FROM word_table ORDER BY en) t, (SELECT @id :=0) init ) t2 ON t1.en = t2.en SET t1.enid = t2.new_id;
注:如果需要按单词首次出现的顺序分配编号,将上述代码中ORDER BY en修改为ORDER BY MIN(主键/行号)即可
3. Python Pandas 场景
如果你用Pandas处理数据表:
import pandas as pd # 假设df为你读取的数据表对象 # 方法1:用dense排名生成连续编号 df['enid'] = df['en'].rank(method='dense').astype(int) # 方法2:用factorize生成编号(默认从0开始,+1后和示例逻辑一致) df['enid'] = pd.factorize(df['en'])[0] + 1
内容的提问来源于stack exchange,提问作者user9
相关产品推荐
相关产品推荐

