2012-12-12 184 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