概述
背景:查询数据,需要根据不同性别选择不同的排序字段和排序规则,总体先按照性别排列,“女”排在“男”前,然后性别为“男”按照last_name,height,family_name,age进行升序排列,性别为“女”按照family_name,age,height,last_name降序排列,
CREATE TABLE friends (
id int UNSIGNED not null auto_increment comment '主键',
family_name VARCHAR(10) COMMENT '姓氏',
last_name VARCHAR(20) COMMENT '名字',
sex VARCHAR(2) COMMENT '性别',
age int COMMENT '年龄',
height int COMMENT '身高',
PRIMARY KEY (id)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='';
INSERT INTO friends(family_name,last_name,sex,age,height)
values('wang','li','女',18,50),
('li','piaoliang','女',19,51),
('zhang','san','男',18,60),
('liu','mei','女',17,46),
('zhao','xiaoman','女',20,49),
('chen','meng','男',16,55);
(1)mybatis项目:直接使用mybatis的动态SQL即可实现,例如
<select id="getInfo" resultType="java.util.Map">
select * from friends order by convert(sex USING gbk) desc
<choose>
<when test="sex == '女'">
, family_name, age, height, last_name desc
</when>
<when test="sex == '男'">
, last_name, height, family_name, age desc
</when>
</choose>
</select>
(2)如果无法在系统中使用动态SQL,可以在SQL中使用case when then else end语法来实现,不过case when then一般返回一个字段,对于这种多个字段的,可以采用如下方式
select * from friends order by convert(sex USING gbk) desc,
case when sex = '女' then family_name else last_name end,
case when sex = '女' then age else height end,
case when sex = '女' then height else family_name end,
case when sex = '女' then last_name else age end
desc
查询结果如下:
SQL语句中的convert是为了中文按照拼音排序,可参考:https://blog.csdn.net/yangfengjueqi/article/details/82683688
最后
以上就是老迟到小熊猫为你收集整理的case when then 后返回多个值的全部内容,希望文章能够帮你解决case when then 后返回多个值所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复