【问题标题】:Using a select case statement to compare field values使用 select case 语句比较字段值
【发布时间】:2013-08-15 22:40:27
【问题描述】:

我正在使用 select case 语句来比较两列。一个值是从表值函数返回的,另一个是数据库列。如果 Preferred First Name 的第一个值为 null,那么我需要将视图中 FirstName 的值显示为别名列。 我不知道我的语法是否正确。有人可以告诉我这是否正确或更好的方法吗?

(SELECT 
     CASE WHEN (
        Select ASSTRING
        FROM dbo.GetCustomFieldValue('Preferred First Name', view_Attendance_Employees.FileKey)
     ) = NULL 
 THEN view_Attendance_Employees.FirstName
    ELSE (
        Select ASSTRING
       FROM dbo.GetCustomFieldValue('Preferred First Name', view_Attendance_Employees.FileKey))
   END) as FirstName,

【问题讨论】:

    标签: sql tsql


    【解决方案1】:

    你可以在这里使用isnull函数:

    select isnull(.. Massive subquery here..., FirstName)
    

    【讨论】:

      【解决方案2】:

      NULL 比较时,您必须使用IS NULL 而不是= NULL

      但在您的情况下,您应该像这样使用ISNULL

      SELECT
          ISNULL(
              SELECT ASSTRING
              FROM dbo.GetCustomFieldValue('Preferred First Name', view_Attendance_Employees.FileKey),
              view_Attendance_Employees.FirstName
          ) AS FirstName,
      ...
      

      【讨论】:

        【解决方案3】:

        如果我正确阅读了您的代码,这可能是一种更简洁的方式。

        WITH CTE 
        AS
        (
            SELECT 
                FirstName
            ,   AsString = ( Select ASSTRING FROM dbo.GetCustomFieldValue('Preferred First Name', X.FileKey) )
            FROM view_Attendance_Employees X
        )
        
        SELECT FirstName = ISNULL(AsString,FirstName)
        FROM CTE
        

        【讨论】:

        • 这很干净。我喜欢。
        猜你喜欢
        • 2012-12-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-19
        • 2016-02-07
        • 1970-01-01
        • 2018-08-03
        相关资源
        最近更新 更多