case when....then....else....end

发布网友 发布时间:2022-04-23 22:53

我来回答

2个回答

热心网友 时间:2023-10-12 19:22

首先你要搞清楚case when的用法
case when最终得到的结果是一个值,而不是多个值,更不是赋值。你写的就是赋值了。
你是要更新么?
update 表 set b = (case A when 1 then 1 else 0 end), c = (case A when 1 then 0 else 1 end)
一定要写两次才行。
如果查询语句,那么B和C应该是你构建的两个列了
select (case A when 1 then 1 else 0 end) as B,
(case A when 1 then 0 else 1 end) as C
from 表

case when也可以写成
case when A = 1 then 1 else 0 end这样的形式。
不管怎么写,你要记住,case when语句,得到的是一个值,而不是在里面赋值。

因为你写的并不明确,所以大家都搞不清楚你到底是要更新B列和C列还是要查询追问额。。我不是要update某列,是这样的
举个例子,我本来是写了一段SQL:select t.month,t.name,t.sex from table t
这样子查询出来一笔数据,如下格式
month name sex
9月 小李 男
9月 小王 男
8月 小红 女
我想让出来的数据变成下面的样子
9月 0 0
9月 0 0
8月 小红 女
也就是说只要是month是9月的,name和sex都显示0 只是显示0,不进行update
用case when如何实现?谢谢

追答select month,
(case month when '9月' then '0' else name end) as name,
(case month when '9月' then '0' else sex end) as sex
from table

看明白了吧?这个很简单了
如果month是9月,那么就取0,否则取相应的字段就好了。但是注意取'0'是字符型的,为了和你的字段类型对应。
记住case when里面多个情况,返回的类型一定要是一致的。
这就相当于构建了一个列一样,不同情况,这个列取的值不同,但是必须是同一类型。

热心网友 时间:2023-10-12 19:22

否则B=0;C=0,否则C=1 ??? C=0,否则C=1 是另一个case when吗

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com