如何在Oracle/SQL Developer中标记重复与唯一记录
Oracle 实现重复记录标记需求
源表数据
Name,Location Ram,India Ram,USA Ram,Japan Ram,India Ram,UK
需求说明
新增原表不存在的Duplicate列:
- 重复的(Name,Location)记录标记为'Y'
- 唯一的(Name,Location)记录标记为'N'
支持以下两种输出形式之一:
输出形式1(所有重复记录均标'Y')
Name,Location,Duplicate Ram,India,Y Ram,India,Y Ram,Japan,N Ram,UK,N Ram,USA,N
输出形式2(每组重复记录仅首条标'N',其余标'Y')
Name,Location,Duplicate Ram,India,N Ram,India,Y Ram,Japan,N Ram,UK,N Ram,USA,N
解决方案
方案1:生成输出形式1
使用窗口函数统计每组的记录数,大于1则标记为'Y':
SELECT Name, Location, CASE WHEN COUNT(*) OVER (PARTITION BY Name, Location) > 1 THEN 'Y' ELSE 'N' END AS Duplicate FROM your_table_name -- 替换为你的实际表名 ORDER BY Location, Name;
方案2:生成输出形式2
使用ROW_NUMBER()为每组内的记录编号,首条记录标'N',其余标'Y':
SELECT Name, Location, CASE WHEN ROW_NUMBER() OVER (PARTITION BY Name, Location ORDER BY NULL) = 1 THEN 'N' ELSE 'Y' END AS Duplicate FROM your_table_name -- 替换为你的实际表名 ORDER BY Location, Name;
注:
ORDER BY NULL表示采用Oracle默认的记录顺序,若需要按特定列排序,可将NULL替换为目标列(如主键列)。
内容的提问来源于stack exchange,提问作者Vivek Patil
相关产品推荐
相关产品推荐

