使用select case语句比较字段值

时间:2013-08-15 14:20:23

标签: sql tsql

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

3 个答案:

答案 0 :(得分:1)

您可以在此处使用isnull功能:

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

答案 1 :(得分:1)

IS NULL比较时,您必须使用= NULL代替NULL

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

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

答案 2 :(得分: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