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

SQL维度层级CASE语句:客户双卡使用标识查询实现问题

解决方案:生成客户双卡标识(Dualflag)

你需要为每个客户生成Dualflag标识:若客户同时持有Debit(借记卡)和Credit(信用卡)则标记为Yes,否则为No。用行号函数无法同步同一客户所有行的标识结果,推荐以下两种高效解决方法:

方法1:使用窗口函数统计不同卡类型

利用窗口函数直接在原表每行计算对应客户的卡类型数量,实现同一客户所有行标识同步:

SELECT
    Customer,
    Card_Type,
    CASE
        WHEN COUNT(DISTINCT Card_Type) OVER (PARTITION BY Customer) = 2 THEN 'Yes'
        ELSE 'No'
    END AS Dualflag
FROM your_table_name;

关键逻辑:

  • PARTITION BY Customer:按客户分组,确保统计范围限定在单个客户内
  • COUNT(DISTINCT Card_Type):统计该客户拥有的不同卡类型数量,同时存在Debit和Credit时结果为2
  • CASE语句根据统计值生成标识,同一客户的所有行将获得相同的Dualflag

方法2:分组统计后关联原表

如果你的SQL方言不支持窗口函数中的DISTINCT(如旧版MySQL),可先分组统计客户的卡类型情况,再关联回原表:

WITH customer_card_stats AS (
    SELECT
        Customer,
        CASE
            WHEN SUM(CASE WHEN Card_Type = 'Debit' THEN 1 ELSE 0 END) > 0
                 AND SUM(CASE WHEN Card_Type = 'Credit' THEN 1 ELSE 0 END) > 0
            THEN 'Yes'
            ELSE 'No'
        END AS Dualflag
    FROM your_table_name
    GROUP BY Customer
)
SELECT
    t.Customer,
    t.Card_Type,
    s.Dualflag
FROM your_table_name t
JOIN customer_card_stats s ON t.Customer = s.Customer;

关键逻辑:

  • 子查询customer_card_stats:按客户分组,分别检查Debit和Credit是否存在,同时满足则标记Yes
  • 通过JOIN将统计结果关联到原表的每一行,确保同一客户的所有行标识一致

内容的提问来源于stack exchange,提问作者Gaurav Jan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 04:46:29