如何修改SQL Server T-SQL查询为表t1新增Tag列标记Email重复记录
方案1:仅查询输出带Tag列的结果(不修改物理表)
直接在原查询基础上增加CASE WHEN逻辑生成Tag列即可,如果你只需要筛选重复记录,保留原WHERE条件即可:
USE MyDatabase ;WITH [CTE1] AS ( SELECT RowNum = ROW_NUMBER () OVER(PARTITION BY [Email] ORDER BY [Email]), * FROM [t1] ) SELECT *, Tag = CASE WHEN RowNum > 1 THEN 'dup' ELSE NULL END FROM [CTE1] WHERE [RowNum] > 1
如果需要查看所有记录(包含首次出现、Tag为空的记录),删除最后一行的WHERE条件即可。
方案2:实际在t1表新增物理Tag列并赋值
如果需要修改表结构永久存储Tag值,执行以下两步操作:
- 新增Tag列
USE MyDatabase ALTER TABLE t1 ADD Tag VARCHAR(10) NULL
- 给重复记录的Tag字段赋值
SQL Server支持直接更新基于单表生成的可更新CTE,执行以下语句即可完成批量赋值:
USE MyDatabase ;WITH [CTE1] AS ( SELECT RowNum = ROW_NUMBER () OVER(PARTITION BY [Email] ORDER BY [Email]), Tag FROM [t1] ) UPDATE CTE1 SET Tag = 'dup' WHERE RowNum > 1
赋值完成后查询t1表即可得到符合你预期的结果。
内容的提问来源于stack exchange,提问作者user3115933
相关产品推荐
相关产品推荐

