需求: 根据数字状态返回中文状态,(其实可以通过数据字段取值);当status=5,数据置顶,引入其他字段先标记,再排序 SELECT b.* FROM ( select <include refid="Base_Column_List"></include>, (CASE WHEN status = 1 THEN '新建' WHEN status = 2 THEN '待本部审批' WHEN status = 3 THEN '待总部审批' WHEN status = 4 THEN '已审批' ELSE '已退回' END) statusName, (CASE WHEN is_oracle = 0 THEN '是' ELSE '否' END) isOracleName,IF(`status`=5,0,1) as ppp from payment_return_apply where is_del = 0 ORDER BY if(status = 5,0,1),status ) b where b.is_del = 0
IF表达式
IF(A,B,C):
如果 A 是TRUE (A <> 0 and A<> NULL),则 IF()的返回值为B; 否则返回值则为 C。IF() 的返回值为数字值或字符串值,具体情况视其所在语境而定。
SELECT IF(sex=1,"男","女") AS s FROM classmates
WHERE sex != '';
CASE WHEN THEN
case具有两种格式。简单case函数和case搜索函数。
--简单case函数 case sex when '1' then '男' when '2' then '女’ else '其他' end --case搜索函数 case when sex = '1' then '男' when sex = '2' then '女' else '其他' end
有一张表,里面有3个字段:语文,数学,英语。其中有3条记录分别表示语文70分,数学80分,英语58分,请用一条sql语句查询出这三条记录并按以下条件显示出来(并写出您的思路):
显示格式:
语文 数学 英语
及格 优秀 不及格
------------------------------------------
select
(case when 语文>=80 then '优秀'
when 语文>=60 then '及格'
else '不及格') as 语文,
(case when 数学>=80 then '优秀'
when 数学>=60 then '及格'
else '不及格') as 数学,
(case when 英语>=80 then '优秀'
when 英语>=60 then '及格'
else '不及格') as 英语,
from table