请求编写Policy Exception赋值逻辑代码(4种CODE场景)
SQL解决方案:根据CODE字段赋值Policy Exception
核心逻辑拆解
通过条件判断+聚合/存在性检查覆盖所有4种场景:
- 场景4(表为空):判断表中无任何记录,返回
NULL - 场景3(仅含'NA'):确认所有记录的CODE都是'NA',返回
'NO' - 场景1和2(含NA+有效值/仅含有效值):其余所有情况统一返回
'YES'
方案一:聚合函数通用写法
适用于MySQL、PostgreSQL、SQL Server等绝大多数数据库:
SELECT CASE -- 场景4:源表无数据 WHEN COUNT(*) = 0 THEN NULL -- 场景3:所有记录的CODE都是'NA' WHEN COUNT(CASE WHEN CODE != 'NA' THEN 1 END) = 0 THEN 'NO' -- 场景1+2:存在非NA的有效值,或同时存在NA和有效值 ELSE 'YES' END AS Policy_Exception FROM your_source_table;
代码说明
COUNT(*):统计表中总记录数,为0则说明表为空COUNT(CASE WHEN CODE != 'NA' THEN 1 END):仅统计CODE不等于'NA'的记录数,为0则表示所有记录都是'NA'
方案二:EXISTS高效写法
数据量较大时,EXISTS无需全表聚合,性能更优:
SELECT CASE -- 场景4:源表无数据 WHEN NOT EXISTS (SELECT 1 FROM your_source_table) THEN NULL -- 场景3:没有非NA的记录 WHEN NOT EXISTS (SELECT 1 FROM your_source_table WHERE CODE != 'NA') THEN 'NO' -- 场景1+2:存在非NA的有效值 ELSE 'YES' END AS Policy_Exception -- 不同数据库虚拟表写法差异: -- Oracle:FROM dual -- MySQL/SQL Server:FROM (SELECT 1) AS dummy FROM (SELECT 1) AS dummy;
代码说明
NOT EXISTS (SELECT 1 FROM your_source_table):直接检查表是否存在记录,不存在则返回NULLNOT EXISTS (SELECT 1 FROM your_source_table WHERE CODE != 'NA'):检查是否没有非NA的记录,是则返回'NO'
内容的提问来源于stack exchange,提问作者user2762336
相关产品推荐
相关产品推荐

