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