我们有一个表测试,其中status_cd是列之一。状态代码可以有三个值:prelim、approved和confirmed。
我必须以这样的方式编写一个查询,以便它能够获取已确认状态的记录cd。如果确认状态CD不存在,则获取批准;如果批准不存在,则获取prelim;如果prelim也不存在,则获取空值
id rule_id status_cd
1 1 prelim
2 1 null
3 1 approved
在上面的例子中,查询应该返回approved for rule\u id=1
最佳答案
试试看:
SELECT T1.*
FROM test T1 JOIN
(SELECT *,CASE status_cd WHEN 'confirmed' THEN 1
WHEN 'approved' THEN 2
WHEN 'prelim' THEN 3
ELSE 4 END AS Rank
FROM test) T2 ON T1.id=T2.id AND T1.Rule_id =T2.Rule_id
ORDER BY T2.Rank
LIMIT 1
结果:
ID RULE_ID STATUS_CD
3 1 approved
样本结果SQL Fiddle。
关于mysql - 在SQL中设置优先级,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28828680/