我正在将MSAccess查询转换为SQL视图,但无法复制错误
Create View [Employees Extended]
AS
SELECT IIf(IsNull([Last Name]),IIf(IsNull([First Name]),[Company],[First Name])
,IIf(IsNull([First Name]),[Last Name],[Last Name] & "," & [First Name])) AS [File As]
,IIf(IsNull([Last Name]),IIf(IsNull([First Name]),[Company],[First Name])
,IIf(IsNull([First Name]),[Last Name],[First Name] & " " & [Last Name])) AS [Employee Name], Employees.*
FROM Employees
ORDER BY IIf(IsNull([Last Name]),IIf(IsNull([First Name]),[Company],[First Name])
,IIf(IsNull([First Name]),[Last Name],[Last Name] & ", " & [First Name]))
,IIf(IsNull([Last Name]),IIf(IsNull([First Name]),[Company],[First Name])
,IIf(IsNull([First Name]),[Last Name],[First Name] & " " & [Last Name]));
ISNull
需要两个参数
答案 0 :(得分:3)
我会表达这种逻辑:
IIf(IsNull([Last Name]),
IIf(IsNull([First Name]),
[Company],[First Name]
),
IIf(IsNull([First Name]),
[Last Name],
[Last Name] & "," & [First Name]
)
) AS [File As]
在SQL Server中为:
COALESCE([First Name] + ',', '') + [Last Name]
实际上,我会在MS Access中使用类似的逻辑:
NZ([First Name] & ",", "") & [Last Name]
在SQL Server中,您应该使用:
+
或CONCAT()
连接字符串IS NULL
与NULL
的值进行比较COALESCE()
将NULL
值替换为其他内容答案 1 :(得分:2)
将ISNULL(ColumnName)
替换为ColumnName IS NULL
。
ISNULL
是SQL Server不会根据布尔表达式是否返回NULL
而返回布尔结果。如果第一个参数的值为ISNULL
,则NULL
将返回第二个参数的值(返回的数据类型将是第一个参数的数据类型)。
例如,在以下查询中:
SELECT ISNULL(A,B)
FROM (VALUES('a',1),
(NULL,2),
('b',NULL)) V(A,B);
将返回以下值:
'a'
'2' --note this is a string, not an integer
'b'