在计算列公式中使用CASE WHEN分配列值时出现语法错误

时间:2016-06-18 21:04:01

标签: sql-server calculated-columns case-when

我正在尝试在计算列别名中使用以下CASE WHEN,但它显示语法错误。

[Password_Last_Changed] [datetime] AS
SELECT CASE
WHEN ([SUA_History1_Date] IS NOT NULL) then [SUA_History1_Date]
WHEN ([SUA_History1_Date] IS NULL) then [SUA_History2_Date]
WHEN ([SUA_History2_Date] IS NULL) then [SUA_History3_Date] 
WHEN ([SUA_History3_Date] IS NULL) then [SUA_History4_Date] 
WHEN ([SUA_History4_Date] IS NULL) then [SUA_History5_Date]
ELSE NULL 
END

不确定出了什么问题。如果对这种逻辑有更好的方法,请让我试一试。

2 个答案:

答案 0 :(得分:1)

对于此问题,使用COALESCE比ISNULL或CASE..WHEN更好,因为可以多次评估COALESCE表达式的输入值。

您还可以使用NULLIF检查NULL个值列中的条件。

ISNULL的NULL值转换为int数据类型,而对于COALESCE,您必须提供数据类型。 ISNULL仅使用2个参数,而COALESCE采用可变数量的参数。

答案 1 :(得分:0)

您可以使用COALESCE

COALESCE([SUA_History1_Date],[SUA_History2_Date],[SUA_History3_Date],[SUA_History4_Date],[SUA_History5_Date])
  

按顺序计算参数,并返回最初未计算为NULL的第一个表达式的当前值。