如何使用SELECT查询新增列并从多列中选取指定优先级值?
按优先级从多列中选取结果的SQL实现
要实现按N > CR > C > CC的优先级从Outcome1、Outcome2、Outcome3、Outcome4四列中选取值并生成新列,可以使用CASE WHEN语句,这是所有主流SQL数据库都支持的通用写法:
SELECT Outcome1, Outcome2, Outcome3, Outcome4, -- 按优先级选取结果的新列 CASE -- 优先匹配N,只要任意一列是N就返回N WHEN Outcome1 = 'N' OR Outcome2 = 'N' OR Outcome3 = 'N' OR Outcome4 = 'N' THEN 'N' -- 没有N时匹配CR WHEN Outcome1 = 'CR' OR Outcome2 = 'CR' OR Outcome3 = 'CR' OR Outcome4 = 'CR' THEN 'CR' -- 没有CR时匹配C WHEN Outcome1 = 'C' OR Outcome2 = 'C' OR Outcome3 = 'C' OR Outcome4 = 'C' THEN 'C' -- 最后匹配CC WHEN Outcome1 = 'CC' OR Outcome2 = 'CC' OR Outcome3 = 'CC' OR Outcome4 = 'CC' THEN 'CC' -- 如果所有列都为空,返回NULL(可根据需求调整) ELSE NULL END AS DESIRED_OUTCOME FROM your_table_name;
逻辑说明
- 按优先级顺序判断:先检查四列中是否存在
N,存在则直接返回N - 若没有
N,检查是否存在CR,存在则返回CR - 若没有
CR,检查是否存在C,存在则返回C - 最后检查是否存在
CC,存在则返回CC - 若所有列都为空或没有匹配值,返回
NULL(可根据实际需求修改为默认值)
示例验证
对照给出的示例数据,比如第三行Outcome3为N,其他列无更高优先级值,返回N;第九行Outcome1为CR,其他列是CC,返回CR,完全符合预期结果。
内容的提问来源于stack exchange,提问作者Milan Nagar
相关产品推荐
相关产品推荐

