2011-10-05 122 views
0

我有2列的表具有相同的名称case语句问题

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

逻辑是

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

我写了这个case语句,但它给了我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''

+4

,我是真的怀疑你有2列具有相同名称在同一个表 –

+0

这是一个畸形的描述 - ValueA的第二个实例实际上是OP试图实现的派生输出。 – MatBailie

回答

0

希望我明白这个问题是正确的,你可以使用coalesce或isnull来替换空值。

这可能是你的case语句:

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

只有当VALUEB是没有和值a为空白,第二列值a应该是空白的,而不是NULL.I正在显示空,试图在第二个ValueA列中将其更改为空白 – user680865

+0

@ user680865此解决方案应该完全做到这一点。 –

+0

它将null的ValueA值更改为0或零。我应该使用coalesce(convert(varchar(25),ValueA))而不是使ValueA值为空吗? – user680865

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 
+0

那么为什么不使用ISNULL函数 – rahularyansharma

+0

我想删除NULL所以这是节目“”或空值,而不是 – user680865

0

这可能会帮助:

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