Teradata SQL如何筛选符合指定序列匹配规则的ID
Teradata SQL 筛选符合规则ID的实现方案
需求说明
需要筛选满足以下规则的ID所有记录:
- 仅允许ID对应的
condition1取值为11、13、15,不可存在其他取值 - 取值对应匹配规则:
condition1 = 11时,condition2必须为NULLcondition1 = 13时,condition2必须等于14condition1 = 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 )
说明
- 请把SQL中的
你的表名替换为实际业务表的名称 - 两种写法逻辑一致:先按ID分组校验所有记录都符合规则,再返回符合要求ID的全部记录,和给出的期望输出结果匹配
- 注意NULL值的判断必须使用
IS NULL/IS NOT NULL,不可使用= NULL判断,SQL中NULL和任何值比较结果都为未知
内容的提问来源于stack exchange,提问作者Nithya Babu
相关产品推荐
相关产品推荐

