You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用含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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 09:42:50