Access中如何为重复姓名按ID顺序追加圆点生成唯一值
Access 重名追加圆点后缀实现方案
你可以直接用Access内置函数+子查询实现需求,不需要额外编写VBA代码,单SQL查询即可完成:
方案1:单查询直接实现(适合中小数据量)
假设你的原始数据源(表/已完成的查询)命名为人员数据源,包含Name、ID两个字段,直接运行如下SQL即可得到预期结果:
SELECT t1.Name & String(DCount("ID", "人员数据源", "Name='" & Replace(t1.Name, "'", "''") & "' AND ID < " & t1.ID), ".") AS 唯一姓名, t1.ID FROM 人员数据源 AS t1 ORDER BY t1.Name, t1.ID;
逻辑说明
DCount函数统计当前姓名下、ID小于当前行ID的记录总数,刚好得到从0开始的同姓名排序序号String(数量, 字符)是Access内置函数,直接生成指定数量的重复字符,序号为0时生成空字符串,刚好匹配第一个姓名不加圆点的要求- 内置的
Replace处理姓名中可能存在的单引号,避免查询语法报错
方案2:临时表优化(适合万条以上大数据量)
如果你的数据量较大,子查询计数性能不足,可以用临时表方案提升运行效率:
- 新建临时表,字段设置为:
Name(文本型)、ID(数值型)、行号(自动编号型) - 按
Name升序、ID升序的规则,将原始数据插入临时表,自动编号字段会自动生成连续行号 - 对临时表运行如下查询得到结果:
SELECT t.Name & String(t.行号 - min_id.min_row, ".") AS 唯一姓名, t.ID FROM 临时表 AS t, (SELECT Name, Min(行号) AS min_row FROM 临时表 GROUP BY Name) AS min_id WHERE t.Name = min_id.Name ORDER BY t.Name, t.ID;
两种方案都可以100%匹配你给出的示例输出要求,直接套用即可。
内容的提问来源于stack exchange,提问作者DVEF
相关产品推荐
相关产品推荐

