0

我正在使用 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,
4

3 回答 3

1

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

select isnull(.. Massive subquery here..., FirstName)
于 2013-08-15T14:31:04.443 回答
1

与 比较时必须使用IS NULL而不是。= NULLNULL

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

SELECT
    ISNULL(
        SELECT ASSTRING
        FROM dbo.GetCustomFieldValue('Preferred First Name', view_Attendance_Employees.FileKey),
        view_Attendance_Employees.FirstName
    ) AS FirstName,
...
于 2013-08-15T14:35:03.483 回答
1

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

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
于 2013-08-15T14:40:27.933 回答