数据库 t
表 b
表内容
Id Name 胜负
1 张三 胜
2 李四 胜
3 张三 胜
4 张三 负
5 王五 胜
6 赵六 负
要求显示谁胜了几场
select Name, case 胜负 when'胜'then1else0as SF endfrom b
显示的内容为
Name SF
张三 1
李四 1
张三 1
张三 0
王五 1
赵六 0
把数字进行加法运算需要用到 sum 是根据Name 合并组的
select Name,sum(case 胜负 when'胜'then1else0end) as'胜利的次数'from b groupby Name
显示的内容为
Name 胜利的次数
张三 2
李四 1
王五 1
赵六 0
如果要想把胜利几场和失败几场都显示出来
select Name,sum(case 胜负 when'胜'then1else0end) as'胜利的次数',sum(case 胜负 when'负'then1else0end)as'失败的次数'from b groupby Name
显示的是
Name 胜利的次数 失败的次数
张三 21
李四 10
王五 10
赵六 01
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:CASEWHEN 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=CASEWHEN grade ISNULLTHEN ’未考’
WHEN grade<60THEN ’不及格’
WHEN grade>=60AND grade<70THEN ’及格’
WHEN grade>=70AND grade<90THEN ’良好’
WHEN grade>=90THEN ’优秀’
END
FROM stud_grade
selectcasewhen column=1then'a'
when column=2then'b'
else c
end