2017-03-02 77 views
0

我不經常使用CASE,但有一個非常簡單的查詢我想返回一個通用語句,當值爲NULL時。我寫了下面的內容,但沒有得到任何錯誤,但它也沒有捕獲NULL值。我已經縮短了幾千篇文章的列表,但希望有人能指出我可能做錯了什麼。先謝謝你。CASE和NULLS問題

**USE Asag_Reporting 

    GO 

SELECT DISTINCT ARTICLE_NUMBER, 
       CASE PM_NAME 
       WHEN NULL THEN 'No PM Available' 
       ELSE PM_NAME 
       END AS 'PM_NAME' 
FROM vw_GIM_Articles 
WHERE ARTICLE_NUMBER IN ('15110', 
'19228', 
'34563', 
'36516');** 
+0

'當PM_Name爲NULL的情況下,那麼'沒有PM可用'否則PM_Name結束'應該工作。與往常一樣,這個技巧是'NULL'或'不是NULL'。 '合併'更合適。 – HABO

回答

3

經過多番思考,我更喜歡這一點,而不是我在下面寫的東西。

SELECT DISTINCT ARTICLE_NUMBER, 
       COALESCE(PM_NAME, 'No PM Available') AS [PM_NAME] 
FROM vw_GIM_Articles 
WHERE ARTICLE_NUMBER IN ('15110','19228','34563','36516'); 

試試這個。

SELECT DISTINCT ARTICLE_NUMBER, 
       CASE 
       WHEN PM_NAME IS NULL THEN 'No PM Available' 
       ELSE PM_NAME 
       END AS [PM_NAME] 
FROM vw_GIM_Articles 
WHERE ARTICLE_NUMBER IN ('15110', 
'19228', 
'34563', 
'36516'); 
+0

工作完美! - 我意識到在這種情況下使用IFNULL要簡單得多,但我正在考慮將要發生的事情,我很好奇你是否可以解釋爲什麼括號在這裏有所作爲?我假設它表示這應該是列名與列中的值?再次感謝 – user3496218

+1

我建議你使用'COALESCE(PM_NAME,'無PM可用')AS [PM_NAME]'。 – DVT

+1

@ user3496218括號是Microsoft的一種方法,用於表明該名稱是一個名稱,應該完全對待(以防中間空白)。這隻適用於微軟的T-SQL。 ANSI標準是「」,但如果你使用它,有時候,你可能會遇到SQL SERVER中QUOTED_IDENTIFIER東西的一些奇怪的錯誤(我曾經看到它,但是不明白,仍然沒有。)。點擊此處查看更多信息:http://www.nigelpsammy.com/2014/03/significance-of-square-brackets-in-t.html – DVT