必威体育Betway必威体育官网
当前位置:首页 > IT技术

case when then 后返回多个值

时间:2019-10-18 13:44:24来源:IT技术作者:seo实验室小编阅读:78次「手机版」
 

case when

背景:查询数据,需要根据不同性别选择不同的排序字段和排序规则,总体先按照性别排列,“女”排在“男”前,然后性别为“男”按照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 最后必须加end

Case具有两种格式。简单Case函数和Case搜索函数。简单Case函数CASE sexWHEN '1' THEN '男'WHEN '2' THEN '女'ELSE '其他

java字符串比较equals()和equalsIgnoreCase()的区别

equals()是所有类的对象共有的方法,继承的是Object类的方法,所有对象都可以调用,在字符串的比较中,区分大小写equalsIgnoreCase()是St

equalsIgnoreCase和equals区别

equalsIgnoreCase:忽略大小写 equals:不忽略大小写

SQL中的case when语法

SQL中case when的应用案例 本案例分析结构如下: - case when案例问题的描述 - case when的主要应用场景 - 实际SQL代码 一:实际

equalsignorecase用法

来源:百度知道解释:public boolean equalsIgnoreCase(String anotherString)将此 String 与另一个 String 进行比较,不考虑大小写。

分享到:

栏目导航

推荐阅读

热门阅读