case when

外语
李进老师 2019-07-17 16:58:36

select 分数,类别=Case
WHEN 分数>=85 THEN '优秀'
WHEN 分数>=75 THEN '良好'
WHEN 分数>=60 THEN '及格'
ELSE '不及格'
END
from 成绩表

#case when#

返回顶部

影响力:6004

SQL条件控制(case when...then...else...end) 的详细解释是什么?

这个解答帮助过1568人

例如一个3条件取值的字段:

case when 条件1 then 取值1 when 条件2 then 取值2  else 取值3 end

when后接条件语句,then后为字段取值(数值或字符串等都可以,但类型须一致)。

CASE WHEN 及 SELECT CASE WHEN的用法: 

Case具有两种格式。简单Case函数和Case搜索函数。

1、 简单Case函数

CASE sex

WHEN '1' THEN '男'

WHEN '2' THEN '女'

ELSE '其他' END

2、Case搜索函数 

CASE WHEN sex = '1' THEN '男' 

WHEN sex = '2' THEN '女' 

ELSE '其他' END
种方式,可以实现相同的功能。简单Case函数的写法相对比较简洁,但是和Case搜索函数相比,功能方面会有些限制,比如写判断式。还有一个需要注意的问题,Case函数只返回第一个符合条件的值,剩下的Case部分将会被自动忽略。

参考资料

新浪博客.新浪博客[引用时间2019-1-22]

编辑时间 2019-10-02 08:35:23
影响力:2987

sql语句中“case when”怎样使用?

这个解答帮助过2105人

举个例子就明白了,例如在员工的工资表把员工的工资分成等级
1000以下为低薪,1000-2000为中等,其他为高薪
select (case when salary <= 1000 then '低薪' when salary > 1000 and salary < 2000 then '中等' else '高薪' end ) as 工资等级 from employee
这样,工资等级就可以当做一个列来处理,包括where里面,可以写where (case when salary <= 1000 then '低薪' when salary > 1000 and salary < 2000 then '中等' else '高薪' end ) = ‘低薪'
当做一个列就好了

编辑时间 2019-01-10
影响力:4072

mysql中case when可以嵌套select吗

描述: mysql中casewhen可以嵌套select吗在then中写select可以吗... mysql中case when可以嵌套select吗在then中写select可以吗
这个解答帮助过8474人

可以。
例如:user表中有id,name,sex三个字段
select case when (select count(id) from user where sex='男')>10 then '男人有10人以上'
else '10人以内' end as count from user;

编辑时间 2019-04-10
影响力:1553

sql中where case when前台传来的值 is null时就1=1否则查询到 字段A=传进来的值

描述: 如题这个该怎么写sql呢... 如题这个该怎么写sql呢
这个解答帮助过7851人

--其实很简单,只是你把问题想复杂了,这个地方可以不用CASE WHEN 用OR就好了
where 前台传来的值 is null or 前台传来的值 is not null and 字段A=传进来的值

--或者一定要用 CASE WHEN
where (case when 前台传来的值 is null then 1 when 前台传来的值=字段A then 1 end) = 1

编辑时间 2019-07-02
影响力:1910

请教一下数据库case when then end空值问题

描述: selectcount(*)aszbs,sum(tx_amt)aszjj,sum(casewhen(jlzt='1'andxym='00'anddfjydm='01')then1else0end)asjkcgbs,sum(casewhen(jlzt='1'andxym='00'anddfjydm='01')thentx_amtelse0e... select count(*) as zbs,sum(tx_amt) as zjj,
sum(case when (jlzt='1' and xym='00' and dfjydm='01') then 1 else 0 end) as jkcgbs,
sum(case when (jlzt='1' and xym='00' and dfjydm='01') then tx_amt else 0 end) as jkcgje from ywty_ysf_lsb where acct=:acct_no
要求是从ywty_ysf_lsb表里算出(jlzt='1' and xym='00' and dfjydm='01')的笔数,(jlzt='1' and xym='00' and dfjydm='01')的成功金额,但是acct是空的时候,jkcgbs、jkcgje 分别赋值到int、double变量的时候会变成-2147219196、-nan这种,如何解决
展开
这个解答帮助过1108人

如果是判断null ,需要使用 is null 进行判断。
case when a is null then '' else a end

case when a is not null then a else '' end

编辑时间 2019-08-07
影响力:4830

mysql 变量case when 返回值为null

描述: selectit.user_id,it.create_date,it.income,casewhen@preVal=it.user_idthen@curVal:=@curVal+it.incomewhen@preVal:=it.user_idthen@curVal:=it.incomeendASsum_incomefromincome_t... select it.user_id, it.create_date, it.income, case when @preVal = it.user_id then @curVal := @curVal + it.income when @preVal := it.user_id then @curVal := it.income end AS sum_income from income_tl it, (select @preVal:=null, @curVal:=null) r order by it.user_id asc, it.create_date asc; 同一条sql语句,为什么把user_id换成字符串返回值就是null,换成数值就有累加的返回值

展开

这个解答帮助过2095人
编辑时间 2018-12-05
影响力:5560

case when 多个判断返回多个字段

描述: 现在有一个表字段如下,这个字段代表总里程多少公里。我现在想查出的数据格式是图二这样的,就是说每个判断返回一个列。6个判断必须返回6列,然后给每一个查出来的结果起别名。... 现在有一个表字段如下,这个字段代表总里程多少公里。我现在想查出的数据格式是图二这样的,就是说每个判断返回一个列。6个判断必须返回6列,然后给每一个查出来的结果起别名。

这个解答帮助过9116人

select sum(case when end_km<5000 then 1 else 0 end) as [小于0.5万公里],
sum(case when end_km>=5000 and end_km<15000 then 1 else 0 end) as [0.5万到1.5万公里],
sum(case when end_km>=15000 and end_km<20000 then 1 else 0 end) as [1.5万到2万公里],
sum(case when end_km>=20000 and end_km<25000 then 1 else 0 end) as [2万到2.5万公里],
sum(case when end_km>=25000 and end_km<30000 then 1 else 0 end) as [2.5万到3万公里],
sum(case when end_km>=30000 then 1 else 0 end) as [2.5万到3万公里]
from 表名

as别名那地方,看你具体是什么数据库了,sqlserver或access的话就像我这么写,oracle的话,将[]换成一对双引号(英文写法滴),mysql的话将[]换成这个``(上边数字键1左边那个键)

编辑时间 2019-08-20
影响力:5813

Oracle where case when语句修改

描述: 下面的语句报错,我希望实现的是:查询的字段出现指定内容时,dept_code到相应的字段中去查找,报错的内容也是这里,请高手们帮忙看看,谢谢。SELECT*FROM(SELECTB50.RKEY,B38.STEP_N... 下面的语句报错,我希望实现的是:查询的字段出现指定内容时,dept_code 到相应的字段中去查找,报错的内容也是这里,请高手们帮忙看看,谢谢。
SELECT *
FROM (SELECT B50.RKEY,
B38.STEP_NUMBER,
B34.DEPT_CODE,
B34.DEPT_NAME,
UPPER (B44.PROD_PARA_03) PARA
FROM VMII_DATA0050 B50,
VMII_DATA0038 B38,
VMII_DATA0034 B34,
VMII_DATA0044 B44
WHERE B50.RKEY = B38.SOURCE_PTR
AND B38.DEPT_PTR = B34.RKEY
AND B38.TTYPE = 4
AND B50.RKEY = B44.SOURCE_PTR
AND B44.SOURCE_TYPE = '2')
WHERE (CASE
WHEN PARA LIKE '%PUNCH%' OR PARA LIKE '%啤%'
THEN
(DEPT_CODE IN
('OPNG',
'OPNG-1',
'OPNG-101',
'WPNG',
'WPNG-1',
'WPNG-101',
'WZNG',
'WZNG-1',
'WZNG-101'))
WHEN PARA LIKE '%ROUT%' OR PARA LIKE '%锣%'
THEN
(DEPT_CODE IN
('ORTG',
'ORTG-1',
'ORTG-101',
'ORTG-102',
'ORTG-2',
'ORTG-201',
'ORTG-202',
'OZRT',
'OZRT-1',
'OZRT-101',
'WRTG',
'WRTG-1',
'WRTG-101',
'WZRG',
'WZRG-1',
'WZRG-101'))
ELSE
(DEPT_CODE IN ('NA'))
END)
展开
这个解答帮助过694人
编辑时间 2019-04-20
影响力:4237

来来mysql 嵌套 case when,是不是不能这么写

这个解答帮助过6244人

直接加在语句最后就行了。

UPDATE `member` SET score = (CASE WHEN score IS NOT NULL THEN score = 0 ELSE score = 1 END) where id =1;

mysql数据库中CASE WHEN语句。
case when语句,用于计算条件列表并返回多个可能结果表达式之一。
CASE 具有两种格式:
简单 CASE 函数将某个表达式与一组简单表达式进行比较以确定结果。
CASE 搜索函数计算一组布尔表达式以确定结果。
两种格式都支持可选的 ELSE 参数。

编辑时间
影响力:147

Sqlserver的case when 用法

描述: selectPayAmountfromTablewhereID=123,怎么用casewhen求PayAmount... select PayAmount from Table where ID=123,怎么用case when求PayAmount
这个解答帮助过752人

 ---下文举例分析了case when常用的用法,如下所示:涉及排序字段的应用
 create table test
(
 qty int ,
 sort varchar(20)
)
insert into test(qty,sort)values
(1,'a'),(2,'b'),(3,'d'),(1,'e')
go
----方法1:
select sort,qty,
  case qty
    when 1 then '少'
    when 2 then '中'
    when 3 then '多'
    else '未知'
  end as [数量范围]
  from test 
--方法2:
select sort,qty,
  case 
    when qty=1 then '少'
    when qty=2 then '中'
    when qty=3 then '多'
    else '未知'
  end as [数量范围]
  from test 

---sum统计用法
select 
 sum( case      when qty=1 then 1 else 0 end) as [少],
 sum( case qty  when  2 then 1 else 0 end) as [中],
 sum( case      when qty=3 then 1 else 0 end) as [多],
 sum( case      when qty<> 1 and qty <>2 and qty <>3 then 1 else 0 end) as [位置]
    from test 
  
 
 ---case when 做排序字段
 declare @i int 
 set @i=0
 select * from test 
 order by 
 case @i when 0 then qty else sort    end 
   
 

go
truncate table test
drop     table test

追问

哇  !

编辑时间 2019-08-29