You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在MS Access中为表内含重复值的字段生成对应统一ID

实现enid字段自动填充的常用方法

根据你使用的工具不同,可选择对应的操作方案:

1. Excel/WPS 表格场景

  • 方案A(提前去重匹配):
    1. 先将en列去重后粘贴到空白列(比如D列,D1开始依次为apple、building、can、water)
    2. 在enid列首个数据单元格(假设表头在第1行,首个数据单元格为B2)输入公式:=MATCH(A2,$D$1:$D$4,0),下拉填充所有行即可,相同单词会匹配到同一编号
  • 方案B(无需额外去重列):
    1. 在enid列首个数据单元格B2输入公式:=XLOOKUP(A2,$A$2:A2,$B$2:B2,MAX($B$2:B2)+1,0)
    2. 直接下拉填充,公式会自动给首次出现的新单词分配递增编号,重复单词复用已有编号

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 07:57:04