博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
sql 语句之 case
阅读量:5283 次
发布时间:2019-06-14

本文共 5707 字,大约阅读时间需要 19 分钟。

case语句语法:
--简单Case函数CASE sexWHEN '1' THEN '男'WHEN '2' THEN '女'ELSE '其他' END --Case搜索函数CASE WHEN sex = '1' THEN '男'WHEN sex = '2' THEN '女'ELSE '其他' END
首先创建一张users表,其中包含id,name,sex三个字段,表内容如下:复制代码SQL> drop table users purge; drop table users purge ORA-00942: 表或视图不存在SQL> create table users(id int,name varchar2(20),sex number); Table createdSQL> insert into users(id,name) values(1,'张一'); 1 row insertedSQL> insert into users(id,name,sex) values(2,'张二',1); 1 row insertedSQL> insert into users(id,name) values(3,'张三'); 1 row insertedSQL> insert into users(id,name) values(4,'张四'); 1 row insertedSQL> insert into users(id,name,sex) values(5,'张五',2); 1 row insertedSQL> insert into users(id,name,sex) values(6,'张六',1); 1 row insertedSQL> insert into users(id,name,sex) values(7,'张七',2); 1 row insertedSQL> insert into users(id,name,sex) values(8,'张八',1); 1 row insertedSQL> commit; Commit completeSQL> select * from users;                                      ID NAME                        SEX--------------------------------------- -------------------- ----------                                      1 张一                                                       2 张二                          1                                      3 张三                                                       4 张四                                                       5 张五                          2                                      6 张六                          1                                      7 张七                          2                                      8 张八                          1 8 rows selected复制代码1、上表结果中的"sex"是用代码表示的,希望将代码用中文表示。可在语句中使用case语句:复制代码SQL> select u.id,u.name,u.sex,  2    (case u.sex  3      when 1 then '男'  4      when 2 then '女'  5      else '空的'  6      end  7     )性别  8  from users u;                                      ID NAME                        SEX 性别--------------------------------------- -------------------- ---------- ------                                      1 张一                            空的                                      2 张二                          1 男                                      3 张三                            空的                                      4 张四                            空的                                      5 张五                          2 女                                      6 张六                          1 男                                      7 张七                          2 女                                      8 张八                          1 男 8 rows selected复制代码2、如果不希望列表中出现"sex"列,语句如下:复制代码SQL> select u.id,u.name,  2    (case u.sex  3      when 1 then '男'  4      when 2 then '女'  5      else '空的'  6      end  7     )性别  8  from users u;                                      ID NAME                 性别--------------------------------------- -------------------- ------                                      1 张一                 空的                                      2 张二                 男                                      3 张三                 空的                                      4 张四                 空的                                      5 张五                 女                                      6 张六                 男                                      7 张七                 女                                      8 张八                 男 8 rows selected复制代码3、将sum与case结合使用,可以实现分段统计。     如果现在希望将上表中各种性别的人数进行统计,sql语句如下:复制代码SQL> select  2    sum(case u.sex when 1 then 1 else 0 end)男性,  3    sum(case u.sex when 2 then 1 else 0 end)女性,  4    sum(case when u.sex <>1 and u.sex<>2 then 1 else 0 end)性别为空  5  from users u;         男性         女性       性别为空---------- ---------- ----------         3          2          0--------------------------------------------------------------------------------SQL> select  2    count(case when u.sex=1 then 1 end)男性,  3    count(case when u.sex=2 then 1 end)女,  4    count(case when u.sex <>1 and u.sex<>2 then 1 end)性别为空  5  from users u;         男性          女       性别为空---------- ---------- ----------         3          2          0

 

2.项目中实际应用

/**     * 方法名称: findAucAgencyDealCount
* 描述: List 中的每一个对象都是一条记录
* Object[]中下标值依次是对应的字段列
* 执行原生的sql连接查询
* @param startDate * @param endDate * @return 数组集合 即 List
*/ @Query(value = "SELECT s.name as aucagencyName,sum(a.qty_auction) as aucLotCount," +"sum(case when b.is_deal=1 and a.is_published=2 then b.qty_deal else 0 end) as aucLotDealCount," +"sum(case when b.is_deal=1 and b.is_settled=1 and a.is_published=2 then b.qty_deal else 0 end) as factCount," +"sum(case when b.is_deal=4 and a.is_published=2 then b.qty_deal else 0 end) as regretCount," +"sum(case when a.is_published=2 and a.type=1 then 1 else 0 end) as shootnumber," +"sum(case when a.is_published=2 and a.type=2 then 1 else 0 end) as sellnumber," +"sum(case when a.is_published=2 and b.is_deal=1 and a.type=1 then 1 else 0 end) as aucLotDealnumber," +"sum(case when a.is_published=2 and b.is_deal=1 and a.type=1 and b.is_priority=1 then 1 else 0 end) as firstnumber," +"sum(case when a.is_published=2 and a.type=2 and b.is_deal=1 then 1 else 0 end) as sellDealnumber " +"from auc_lot a left join auc_brand b on a.id=b.auc_id left join sys_agency s on a.agency_id=s.id " +"where (DATE_FORMAT(a.published_time,'%Y-%m-%d') BETWEEN :startDate and :endDate) " + "and a.agency_id in (:agencyIds)" +"GROUP BY s.name",nativeQuery=true) List
findAucAgencyDealCount(@Param("startDate") String startDate, @Param("endDate") String endDate,@Param("agencyIds") List
agencyIds);

 

转载于:https://www.cnblogs.com/mr-wuxiansheng/p/6395587.html

你可能感兴趣的文章
字符串方法title()、istitle()
查看>>
yield语句
查看>>
查看linux系统中占用cpu最高的语句
查看>>
[洛谷P1738]洛谷的文件夹
查看>>
ubuntu server设置时区和更新时间
查看>>
【京东咚咚架构演进】-- 好文收藏
查看>>
【HTML】网页中如何让DIV在网页滚动到特定位置时出现
查看>>
文件序列化
查看>>
jQuery之end()和pushStack()
查看>>
Bootstrap--响应式导航条布局
查看>>
Learning Python 009 dict(字典)和 set
查看>>
JavaScript中随着鼠标拖拽而移动的块
查看>>
HDU 1021 一道水题
查看>>
The operation couldn’t be completed. (LaunchServicesError error 0.)
查看>>
php每天一题:strlen()与mb_strlen()的作用分别是什么
查看>>
工作中收集JSCRIPT代码之(下拉框篇)
查看>>
《转载》POI导出excel日期格式
查看>>
code异常处理
查看>>
git - 搭建最简单的git server
查看>>
会话控制
查看>>