案件陈述问题

时间:2011-10-05 11:06:36

标签: sql tsql sql-server-2008

我有一个有两列同名的表

ValueA  ValueB  ValueA
12      Yes     
        No      NULL
20      Yes    
0       No      0
3       No      3

逻辑是

  • ValueA''
  • ValueB'No'
  • 然后第二列中的ValueA应为''(不是NULL

我写了这个案例陈述,但它给了我NULL而不是''

Case when ValueB ='No' then convert(varchar(25), ValueA)
when ValueB ='No' and ValueA ='' then ''
else ''
end

即使我写了

Case when ValueB
when 'No' then convert(varchar(25), ValueA) 
else ''
end

以上两个代码都给出了相同的结果

如何在第二个ValueA列中使用NULL替换或删除''

3 个答案:

答案 0 :(得分:1)

您需要指定NULL作为输出的特定情况。

CASE WHEN ValueA = '' AND ValueB = 'No' THEN NULL
     WHEN                 ValueB = 'No' THEN convert(varchar9250, ValueA)
                                        ELSE ''
END

修改

那时我误解了你的问题。但你可以使用相同的方法......

CASE WHEN ValueA = '' AND ValueB = 'No' THEN ''
     WHEN                 ValueB = 'No' THEN convert(varchar9250, ValueA)
                                        ELSE ''
END


或者,正如人们所建议的那样,使用ISNULL或COALESCE删除NULL值......

CASE WHEN ValueB = 'No' THEN ISNULL(convert(varchar9250, ValueA), '')
                        ELSE ''
END

答案 1 :(得分:0)

我希望我理解正确的问题,你可以使用coalesce或isnull来替换空值。

这可能是你的案例陈述:

case when ValueB = 'Yes' then '' 
     when ValueB = 'No' then coalesce(cast(ValueA as varchar(25)), '') 
else null     end

答案 2 :(得分:0)

这可能有所帮助:

Select
case when ValueA = '' and ValueB = 'No' then '' 
     when ValueB = 'No' then ValueA     else '' end  [ValueA]
from table