【问题标题】:Syntax error when assigning column value using CASE WHEN in Computed Column Formula在计算列公式中使用 CASE WHEN 分配列值时出现语法错误
【发布时间】:2016-06-18 21:04:01
【问题描述】:

我正在尝试在计算列别名中使用以下 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

不知道出了什么问题。如果这个逻辑有更好的方法,请让我试试。

【问题讨论】:

  • 删除 SELECT 关键字。此外,CASE 很“奇怪”。
  • 最后 3 个 When 永远不会执行

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


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    你可以使用COALESCE:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-04
      • 1970-01-01
      • 1970-01-01
      • 2022-01-18
      • 2016-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多