今天作工程时,遇到了case里面嵌套case的状况
sql
直接上例子code
SELECT CASE count(*) WHEN 0 THEN 'xx' ELSE tuf.FOLLOW_FLAG END FROM T_USER_FOLLOW AS tuf WHERE ( USER_ID_A = 1000000006 AND USER_ID_B = 1000000005 AND (FOLLOW_FLAG = '00' OR FOLLOW_FLAG = '02') ) OR ( USER_ID_A = 1000000006 AND USER_ID_B = 1000000005 AND (FOLLOW_FLAG = '01' OR FOLLOW_FLAG = '02' ) )
如上例子的含义是:class
where条件后面若是查出没有值的话,输出'xx'select
若是有值的话,输出follow_flag(值为'00'、'01'、'02'当中的一个)co
即总的输出值有四个:'xx'、'00'、'01'、'02'cas
如今的需求是:输出值中若是有'01',则将'01'改成'xx'
个人SQL改变以下
select CASE count(*) WHEN 0 THEN 'xx' ELSE CASE tuf.FOLLOW_FLAG WHEN '01' THEN 'xx' ELSE tuf.FOLLOW_FLAG END END from T_USER_FOLLOW as tuf where (USER_ID_A=1000000006 and USER_ID_B=1000000005 and (FOLLOW_FLAG = '00' or FOLLOW_FLAG = '02') ) or (USER_ID_A=1000000006 and USER_ID_B=1000000005 and (FOLLOW_FLAG = '01' or FOLLOW_FLAG = '02' ) )
即在case里面在嵌套一层cese,来判断输出值是否为'01',若是是,则将其转换成'xx';不然原值输出。