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

SQL实现如下功能用casewhen...then...else....end实现当A=1时,那么B=1,否则B=0;C=0,否则C=1... SQL实现如下功能
用case when...then...else....end 实现
当A=1时,那么B=1,否则B=0;C=0,否则C=1
展开
 我来答
hit_lubin
2011-09-08 · TA获得超过7889个赞
知道大有可为答主
回答量:1554
采纳率:100%
帮助的人:1992万
展开全部
首先你要搞清楚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里面多个情况,返回的类型一定要是一致的。
这就相当于构建了一个列一样,不同情况,这个列取的值不同,但是必须是同一类型。
hd1983sud
2011-09-08 · TA获得超过578个赞
知道小有建树答主
回答量:519
采纳率:0%
帮助的人:155万
展开全部
否则B=0;C=0,否则C=1 ??? C=0,否则C=1 是另一个case when吗
更多追问追答
追问
不是另一个
是相同的case when
相当于:
case when A=1 那么B=1,否则B=0
case when A=1 那么C=0,否则C=1
能不能只用一个case when条件下,进行多列的判断
追答
应该可以啊
case when A=1 那么B=1,C=0 否则B=0,C=1
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式