我们有一个表测试,其中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/

10-11 00:17