如何将两步视图合并为单个视图实现PASS/FAIL判定逻辑
合并视图实现逻辑的解决方案
你可以直接在单个视图中完成列标准化和最终结果计算的逻辑,无需拆分两个视图。核心思路是把原本分两步的判断逻辑合并到同一条SELECT语句中,具体有两种实现方式:
方式一:直接判断最终结果(最简洁)
如果不需要保留每列的单独状态,只需要最终的"Overall Value",可以直接通过一次条件判断完成:
CREATE VIEW your_combined_view AS SELECT *, -- 保留原表所有列 CASE -- 只要任意一列符合PASS条件,直接返回PASS WHEN col1 IN ('good', 'passing score') OR col2 IN ('good', 'passing score') OR col3 IN ('good', 'passing score') THEN 'PASS' -- 其余情况(包括列值为bad/unacceptable或NULL)返回FAIL ELSE 'FAIL' END AS "Overall Value" FROM your_source_table;
方式二:保留单列状态+计算最终结果
如果需要同时查看每列的标准化状态和最终结果,可以在视图中先生成单列状态,再基于这些状态计算"Overall Value":
CREATE VIEW your_combined_view AS SELECT *, col1_status, col2_status, col3_status, -- 只要任意一个单列状态为PASS,最终结果为PASS CASE WHEN col1_status = 'PASS' OR col2_status = 'PASS' OR col3_status = 'PASS' THEN 'PASS' ELSE 'FAIL' END AS "Overall Value" FROM ( -- 子查询中完成每列的标准化 SELECT *, CASE WHEN col1 IN ('good', 'passing score') THEN 'PASS' WHEN col1 IN ('bad', 'unacceptable') OR col1 IS NULL THEN 'FAIL' END AS col1_status, CASE WHEN col2 IN ('good', 'passing score') THEN 'PASS' WHEN col2 IN ('bad', 'unacceptable') OR col2 IS NULL THEN 'FAIL' END AS col2_status, CASE WHEN col3 IN ('good', 'passing score') THEN 'PASS' WHEN col3 IN ('bad', 'unacceptable') OR col3 IS NULL THEN 'FAIL' END AS col3_status FROM your_source_table ) AS status_subquery;
关键说明
- 两种方式都完全替代了原来两个视图的逻辑,一步生成最终结果;
- 处理NULL值时,
CASE语句中col IS NULL的判断会自动把NULL归类为FAIL; - 可以根据实际需求选择是否保留单列的标准化状态列。
内容的提问来源于stack exchange,提问作者Patrick Teng
相关产品推荐
相关产品推荐

