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

Teradata SQL如何筛选符合指定序列匹配规则的ID

Teradata SQL 筛选符合规则ID的实现方案

需求说明

需要筛选满足以下规则的ID所有记录:

  • 仅允许ID对应的condition1取值为11、13、15,不可存在其他取值
  • 取值对应匹配规则:
    • condition1 = 11 时,condition2 必须为NULL
    • condition1 = 13 时,condition2 必须等于14
    • condition1 = 15 时,condition2 必须等于16

实现SQL

写法1:使用Teradata特有的QUALIFY窗口函数(性能更优)

SELECT 
    id,
    condition1,
    condition2
FROM 你的表名
QUALIFY 
    -- 按ID分组统计不符合规则的行数,行数为0则保留该ID所有记录
    COUNT(
        CASE WHEN 
            condition1 NOT IN (11,13,15)
            OR (condition1 = 11 AND condition2 IS NOT NULL)
            OR (condition1 = 13 AND condition2 <> 14)
            OR (condition1 = 15 AND condition2 <> 16)
        THEN 1 END
    ) OVER (PARTITION BY id) = 0

写法2:使用子查询过滤ID(兼容性更强)

SELECT 
    id,
    condition1,
    condition2
FROM 你的表名
WHERE id IN (
    SELECT id
    FROM 你的表名
    GROUP BY id
    HAVING COUNT(
        CASE WHEN 
            condition1 NOT IN (11,13,15)
            OR (condition1 = 11 AND condition2 IS NOT NULL)
            OR (condition1 = 13 AND condition2 <> 14)
            OR (condition1 = 15 AND condition2 <> 16)
        THEN 1 END
    ) = 0
)

说明

  1. 请把SQL中的你的表名替换为实际业务表的名称
  2. 两种写法逻辑一致:先按ID分组校验所有记录都符合规则,再返回符合要求ID的全部记录,和给出的期望输出结果匹配
  3. 注意NULL值的判断必须使用IS NULL/IS NOT NULL,不可使用= NULL判断,SQL中NULL和任何值比较结果都为未知

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 23:27:05