sql - 如何编写 case 语句以返回重复记录?
问题描述
我有一个姓名和地址表,并希望返回完整的姓名和地址列表,并带有一个额外的列,用于标识地址是重复地址还是唯一地址。当我运行一个更简单的语句时,我可以看到几个重复的地址条目——
SELECT PersonAddressLine1, Count (*)
FROM CompanyTable1
GROUP BY PersonAddressLine1
或者
SELECT PersonAddressLine1, Count (*)
FROM CompanyTable1
GROUP BY PersonAddressLine1
HAVING COUNT (*) > 1
但我需要返回带有列的完整表 -
PersonID, PersonName, PersonAddressLine1, AddressVerification (Duplicate / Unique), CompanyID, CompanyName.
PersonID - 1
PersonID - 2
PersonID - 3
PersonName - Ryan
PersonName - Andrew
PersonName - Ben
PersonAddressLine1 - 100 Avenue
PersonAddressLine1 - 100 Avenue
PersonAddressLine1 - 200 Avenue
如果我使用下面的 case 语句,组条件会影响 PersonAddressLine1 计数结果。它显示所有地址都是唯一的。
SELECT PersonID, PersonName, PersonAddressLine1, CompanyID, CompanyName,
CASE WHEN count(*) > 1
THEN CONCAT(PersonName,' ','Address Line 1 is duplicate')
ELSE CONCAT(PersonName,' ','Address Line 1 is unique')
END AS 'Person Address Verification'
FROM CompanyTable1
GROUP by PersonAddressLine1, PersonID, PersonName, CompanyID, CompanyName
解决方案
您可以使用窗口函数COUNT(*) OVER (PARTITION BY PersonAddressLine1)
来计算重复次数
SELECT PersonID, PersonName, PersonAddressLine1, CompanyID, CompanyName,
CASE WHEN COUNT(*) OVER (PARTITION BY PersonAddressLine1) > 1
THEN CONCAT(PersonName,' ','Address Line 1 is duplicate')
ELSE CONCAT(PersonName,' ','Address Line 1 is unique')
END AS 'Person Address Verification'
FROM CompanyTable1
您当前的查询现在正在做的不仅是检查,PersonAddressLine1
而且是以下所有
PersonAddressLine1, PersonID, PersonName, CompanyID, CompanyName
推荐阅读
- apache-spark - 如何将流数据与更新缓慢的表(例如每天一次)连接起来?
- python - 在另一个 python 文件中编辑 GUI
- mongodb - 基于索引的嵌套数组元素计数
- mysql - Django - 多选框 - 将更改保存到数据库
- java - 如何测试是否在代码路径中引发和处理了异常?
- oracle - 创建触发器时的 PL/SQL 问题
- sql - SQL合并重叠时间间隔
- keyboard-shortcuts - 如何在 VS 2019 中跳转到匹配的大括号?
- excel - 根据可变成本和固定成本之间的分割在excel中对单元格进行着色 - 可能吗?
- java - weblogic中处于RUNNABLE状态的线程