SQL问题 - CASE WHEN

时间:2017-03-27 11:51:40

标签: sql sql-server

当声明时,有人能发现这个案例的问题吗? SQL Server似乎不喜欢它,我无法发现问题!

SELECT CASE @Next_Insp_Date
    WHEN @Purpose_ID = 1 THEN DATEADD(m, 6, GETDATE()) AS @Next_Insp_Date
    WHEN @Purpose_ID = 2 THEN DATEADD(m, 12, GETDATE()) AS @Next_Insp_Date
    ELSE @Next_Insp_Date
END AS @Next_Insp_Date

4 个答案:

答案 0 :(得分:4)

案例陈述只能包含一个别名。试试这样:

SELECT CASE 
    WHEN @Purpose_ID = 1 THEN DATEADD(m, 6, GETDATE()) 
    WHEN @Purpose_ID = 2 THEN DATEADD(m, 12, GETDATE())
    ELSE --some other value here
END AS Some_alias_name -- here it is the alias

我不知道@Next_Insp_Date持有什么,但确定它在错误的地方。在else语句中,您应该具有其他值

如果要从@Next_Insp_Date检索值,则应该使用else语句。

答案 1 :(得分:3)

SELECT CASE @Purpose_ID
    WHEN 1 THEN DATEADD(m, 6, GETDATE())
    WHEN 2 THEN DATEADD(m, 12, GETDATE())
    ELSE @Next_Insp_Date
END

不确定AS @Next_Insp_Date的用意是什么,如果您需要,别名属于END

答案 2 :(得分:1)

您的列别名是@Next_Insp_Date,除非您引用它,否则它不能成为{1}}。你可能想把它命名为Next_Insp_Date。

此外,您混合了CASE @val when 1 thenCASE WHEN @val = 1 then

这两种CASE样式
SELECT CASE 
    WHEN @Purpose_ID = 1 THEN DATEADD(m, 6, GETDATE())
    WHEN @Purpose_ID = 2 THEN DATEADD(m, 12, GETDATE())
    ELSE @Next_Insp_Date
END AS [Next_Insp_Date]

答案 3 :(得分:0)

声明@Next_Insp_Date datetime = getdate(); 声明@Purpose_ID int = 3;

SELECT @Next_Insp_Date = CASE WHEN @Purpose_ID = 1那么DATEADD(m,6,GETDATE()) 当@Purpose_ID = 2那么DATEADD(m,12,GETDATE()) ELSE @Next_Insp_Date END print @Next_Insp_Date;