2011-10-05 124 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