如何用含CASE WHEN的SQL查询同一Account No.下地址不同的借款人?
用CASE WHEN实现目标SQL查询的方案
以下两种写法都能满足你的需求,通过CASE WHEN标记并筛选出Account No.为294且地址不同的记录:
写法一:结合窗口函数
这种写法利用窗口函数统计同一账号下的地址差异情况,通过CASE WHEN生成标记后筛选目标记录:
SELECT * FROM ( SELECT "Borrower No.", "Account No.", "Borrower Name", "Address", CASE WHEN COUNT(DISTINCT "Address") OVER (PARTITION BY "Account No.") > 1 THEN 1 ELSE 0 END AS has_address_diff FROM Borrower_TBL WHERE "Account No." = 294 ) sub_query WHERE has_address_diff = 1;
逻辑说明:
COUNT(DISTINCT "Address") OVER (PARTITION BY "Account No."):统计当前账号下不同地址的数量CASE WHEN:根据统计结果生成标记,当地址数量大于1时标记为1(表示存在地址差异)- 外层查询筛选出标记为
1的记录,即你需要的两行数据
写法二:结合EXISTS子查询
如果你的数据库对窗口函数支持有限,可以用这种关联子查询的方式:
SELECT "Borrower No.", "Account No.", "Borrower Name", "Address" FROM ( SELECT *, CASE WHEN EXISTS ( SELECT 1 FROM Borrower_TBL t2 WHERE t2."Account No." = t."Account No." AND t2."Address" != t."Address" ) THEN 1 ELSE 0 END AS has_different_address FROM Borrower_TBL t WHERE t."Account No." = 294 ) t WHERE has_different_address = 1;
逻辑说明:
EXISTS子查询检查当前记录所属账号下是否存在其他地址不同的记录CASE WHEN根据子查询结果生成标记,存在则标记为1- 外层筛选出标记为
1的记录,得到目标数据
内容的提问来源于stack exchange,提问作者Killian Gavin
相关产品推荐
相关产品推荐

