2012-12-12 224 views
6

我需要幫助爲視圖編寫一個case語句。基表有2列,我會參考:'舞臺'和'是否'。條件CASE語句語法

如果Stage列爲1,並且YesNo列爲1,則需要CASE語句在視圖中將其顯示爲「否」如果舞臺列爲1,並且YesNo列爲0,則需要CASE語句在視圖中將其顯示爲「是」。如果Stage列爲1,並且YesNo列爲NULL,則需要CASE語句在視圖中將其顯示爲NULL。如果舞臺不是1,我需要YesNo列在視圖中顯示爲NULL。

這是我認爲是正確的邏輯,但是當我嘗試運行它時,我得到了有關單詞'AS'的語法錯誤。有什麼建議麼?

CASE 
    WHEN a.Stage = 1 and a.YesorNo = 1 THEN 'No' 
    ELSE WHEN a.Stage = 1 and a.YesorNo = 0 THEN 'Yes' 
END AS NewViewColumn 
+4

我可以:

CASE WHEN a.Stage = 1 and a.YesorNo = 1 THEN 'No' WHEN a.Stage = 1 and a.YesorNo = 0 THEN 'Yes' END AS NewViewColumn 

或者使用說有一個名爲'YesOrNo'的專欄,其中1表示'不',這讓我有點內心的哭泣。 –

+3

我強烈建議您注意Matt的評論並修復您的命名/數據方案。首先,在編程中,(幾乎?)通常是正確的,1表示真,0表示假。反轉這是非常奇怪的,並且使你的代碼難以閱讀和理解。其次,儘管你沒有提到你的表名「YesOrNo」不是一個很好的列名,因爲它是對問題的回答,而不是屬性。一個更好的名字將是'IsDeleted'或'NeedsExpressHandling'或'HasPermission'或者明顯的True/False。 – Pondlife

回答

6

取出ELSE WHEN,如果你離開ELSE出來,然後將返回null不符合其餘邏輯的任何項目:剛剛

CASE 
    WHEN a.Stage = 1 and a.YesorNo = 1 THEN 'No' 
    WHEN a.Stage = 1 and a.YesorNo = 0 THEN 'Yes' 
    ELSE 'other' 
END AS NewViewColumn 
+0

非常感謝大家,這很快就解決了我的問題。 – dp3

1

您正在使用ELSE WHEN,這應該是ELSEWHEN .. THEN ..

CASE 
    WHEN a.Stage = 1 and a.YesorNo = 1 THEN 'No' 
    ELSE 'Yes' 
END AS NewViewColumn 

或者:

CASE 
    WHEN a.Stage = 1 and a.YesorNo = 1 THEN 'No' 
    WHEN a.Stage = 1 and a.YesorNo = 0 THEN 'Yes' 
END AS NewViewColumn 

退房的msdn page on CASE以獲取更多信息。

2
CASE 
    WHEN a.Stage = 1 and a.YesorNo = 1 THEN 'No' 
    WHEN a.Stage = 1 and a.YesorNo = 0 THEN 'Yes' 
    ELSE something else -- If you ignored this it will be NULL 
END AS NewViewColumn