oracle case.when group by
2016-07-26 12:47
597 查看
数据库 t 表 b 表内容 Id Name 胜负 1 张三 胜 2 李四 胜 3 张三 胜 4 张三 负 5 王五 胜 6 赵六 负 要求显示谁胜了几场 select Name, case 胜负 when '胜' then 1 else 0 as SF end from b 显示的内容为 Name SF 张三 1 李四 1 张三 1 张三 0 王五 1 赵六 0 把数字进行加法运算需要用到 sum 是根据Name 合并组的 select Name,sum(case 胜负 when '胜' then 1 else 0 end) as '胜利的次数' from b group by Name 显示的内容为 Name 胜利的次数 张三 2 李四 1 王五 1 赵六 0 如果要想把胜利几场和失败几场都显示出来 select Name,sum(case 胜负 when '胜' then 1 else 0 end) as '胜利的次数',sum(case 胜负 when '负' then 1 else 0 end)as '失败的次数' from b group by Name 显示的是 Name 胜利的次数 失败的次数 张三 2 1 李四 1 0 王五 1 0 赵六 0 1 String sql = "select t.f_city_name as cityName,count(*) as all_cnt\n" + " ,sum(case when t.f_status='未通过' then 1 else 0 end) as err_cnt\n" + " ,sum(case when t.f_status='通过' then 1 else 0 end) as ok_cnt\n" + " ,sum(case when (select months_between( t.f_checked_time,t.f_created ) months from dual)>=1 then 1 else 0 end) as oneMonth_cnt\n" + " ,sum(case when (select months_between( t.f_checked_time,t.f_created ) months from dual)>=2 then 1 else 0 end) as twoMonth_cnt\n" + "from t_front_maintain t\n" + whereStr + "group by t.f_city_name"; System.out.println("sql"+sql); list = jdbcTemplate.queryForList(sql) ;
CASE命令有两种语句格式。 语法形式1:CASE expression WHEN expression_11 THEN expression_12 … WHEN expression_n1 THEN expression_n2 [ELSE expression_m] END 该语句的执行过程是:将CASE后面表达式的值与各WHEN子句中的表达式的值进行比较,如果两者相等,则返回THEN后的表达式的值,然后跳出CASE语句,否则返回ELSE子句中的表达式的值。ELSE子句是可选项。当CASE语句中不包含ELSE子句时,如果所有比较失败时,CASE语句将返回NULL。 【例】从数据表stud_info中,选取stud_id、grade,如果grade为“男”则输出“M”,如果为“女”输出“F”。 SELECT stud_id, sex=CASE gender WHEN ’男’ THEN ’M’ WHEN ’女’ THEN ’F’ END FROM stud_info 语法形式2:CASE WHEN condition_expression_1 THEN expression_1 … WHEN condition_expression_n THEN expression_n [ELSE expression_m] END 该语句的执行过程是:首先测试WHEN后的条件表达式的值,如果其值为真,则返回THEN后面的表达式的值,否则测试下一个WHEN子句中的表达式的值,如果所有WHEN子句后的表达式的值都为假,则返回ELSE后的表达式的值,如果在CASE语句中没有ELSE子句,则CASE表达式返回NULL。 注意:CASE命令可以嵌套到SQL语句中。 【例】从stud_grade表中查询所有同学考试成绩情况,凡成绩为空者输出“未考”、小于60分输出“不及格”、60分至70分输出“及格”、70分至90分输出“良好”、大于或等于90分时输出“优秀”。 SELECT stud_id,name,score=CASE WHEN grade IS NULL THEN ’未考’ WHEN grade<60 THEN ’不及格’ WHEN grade>=60 AND grade<70 THEN ’及格’ WHEN grade>=70 AND grade<90 THEN ’良好’ WHEN grade>=90 THEN ’优秀’ END FROM stud_grade select case when column=1 then 'a' when column=2 then 'b' else c end
相关文章推荐
- ORACLE数据库---"ORA-00942: 表或视图不存在 "的原因和解决方法---续
- expdp impdp 排除统计信息 导入导出 性能对比
- Oracle 11g RAC INS-06006 Passwordless SSH connectivity not set up between the following node(s)
- 7.Hibernate 延迟加载&立即加载
- Oracle 11gR2干净的清除并重建OCR和表决磁盘的方法
- Oracle 删除用户和表空间
- 安装Oracle11g_win32,以及遇到的问题和解决方案
- Oracle用户的权限都有哪些
- Linux下登录Oracle命令行时删除键^H解决方法
- Oracle - SQL学习笔记 2
- Oracle用户的创建及权限设置
- Oracle - SQL学习笔记 1
- ORACLE 常用函数 日期/时间函数
- hibernate的oracle配置(转)
- Oracle RMAN 清除归档日志
- Oracle表空间和数据文件
- oracle11g在linux下的安装
- Oracle11.2.0.1如何升级到11.2.0.3 Oracle同版本升级
- oracle学习笔记
- Oracle 10g字符集问题