我正在尝试在计算列别名中使用以下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
不确定出了什么问题。如果对这种逻辑有更好的方法,请让我试一试。
答案 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的第一个表达式的当前值。