【发布时间】:2018-12-20 11:23:07
【问题描述】:
我有一个场景,我有 4 列 - SUBBRAND、COLLECTIONS、PLCYCLE、COLORFAMILY,我必须为记录分配优先级:
- 如果所有 4 个都有有效值(非空白或非空) - 优先级 '1' ;
- 如果其中任何 3 个具有有效值(非空白或非空) - 优先级 '2' ;
- 如果其中任何 2 个具有有效值(非空白或非空) - 优先级 '3' ;
- 如果其中任何 1 个具有有效值(非空白或非空) - 优先级 '4'。
编写包含所有可能组合的案例语句是完成此任务的唯一方法还是有任何简单的方法?
示例代码:
CASE WHEN SUBBRAND IS NOT NULL AND COLLECTIONS IS NOT NULL
AND PLCYCLE IS NOT NULL AND COLORFAMILY IS NOT NULL
THEN 1 AS PRIORITY,
WHEN SUBBRAND IS NOT NULL AND COLLECTIONS IS NOT NULL
AND PLCYCLE IS NOT NULL OR
WHEN COLLECTIONS IS NOT NULL AND PLCYCLE IS NOT NULL
AND COLORFAMILY IS NOT NULL OR
WHEN PLCYCLE IS NOT NULL AND COLORFAMILY IS NOT NULL
AND WHEN SUBBRAND IS NOT NULL OR
so on....
THEN 2 AS PRIORITY
and other conditions..
END PRIORITY
提前感谢您的帮助!
【问题讨论】:
-
如果全部为空怎么办?草稿中每个条件后面的
OR是无效的语法。您的方法可能优于任何复杂的 UNION 和聚合方法,因为未计算列上的 CASE 尽可能便宜。