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

如何筛选表中蓝色行?排除对应MSISDN含IDENT_NUMBER值的行

解决方法:筛选目标行的SQL实现

嘿,针对你的需求,我整理了两种实用的SQL实现方式,你可以根据实际场景灵活选择:

场景1:保留「IDENT_NUMBER非空」的行,以及「IDENT_NUMBER为空但所属MSISDN无任何非空IDENT_NUMBER记录」的行

这种逻辑正好对应你说的“排除绿色行”需求——绿色行就是那些IDENT_NUMBER为空,但同MSISDN下存在其他非空IDENT_NUMBER记录的行,我们要把这类行过滤掉,保留剩下的蓝色行。

用窗口函数的写法(适配MySQL 8+/PostgreSQL/SQL Server等主流现代数据库):

WITH msisdn_id_status AS (
    SELECT 
        *,
        -- 标记当前MSISDN是否存在非空的IDENT_NUMBER记录
        MAX(CASE WHEN IDENT_NUMBER IS NOT NULL THEN 1 ELSE 0 END) 
            OVER (PARTITION BY MSISDN) AS has_non_null_ident
    FROM your_table
)
SELECT *
FROM msisdn_id_status
-- 保留两种行:要么MSISDN无任何非空ID,要么当前行ID非空
WHERE has_non_null_ident = 0 OR IDENT_NUMBER IS NOT NULL;

场景2:完全排除所有「存在至少一条非空IDENT_NUMBER记录的MSISDN」的所有行

如果你希望只要某个MSISDN有过非空IDENT_NUMBER的记录,就把这个MSISDN的所有行(包括非空ID的行)全部排除,那可以用更简洁的子查询写法:

SELECT *
FROM your_table
WHERE MSISDN NOT IN (
    -- 找出所有存在非空IDENT_NUMBER的MSISDN
    SELECT DISTINCT MSISDN
    FROM your_table
    WHERE IDENT_NUMBER IS NOT NULL
);

补充说明

两种写法都默认保留原表的重复项(如果有的话),完全符合你“结果是否包含重复项均可”的要求。使用时只需要把your_table替换成你实际的表名就行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:06:36