在T-SQL中,您可以这样做:
SELECT ProductId, COALESCE(Price, 0)
FROM Products
你如何在Access SQL中做同样的事情?我看到在VBA中使用Nz进行的示例,但我正在寻找SQL等价物。
感谢。
答案 0 :(得分:22)
Access支持Nz功能,允许您在查询中使用它。请注意,Nz与T-SQL ISNULL函数相同。它不能像COALESCE那样采用任意数量的参数。
答案 1 :(得分:16)
如果它在Access查询中,您可以尝试:
"Price = IIf([Price] Is Null,0,[Price])"
答案 2 :(得分:9)
看起来我可以使用:
SELECT ProductId, Nz(Price, 0)
FROM Products
似乎工作正常。
答案 3 :(得分:4)
使用Iif(Price is null, 0, Price)
可以获得最佳效果(请参阅Allen Browne's performance tips)。但是,SQL Server Coalesce()
具有优于Iif()
和Nz()
的优势,它可以在级联中处理多个参数。所以我创建了这个快速的VBA等价物:
Function Coalesce(ParamArray varValues()) As Variant
'returns the first non null value, similar to SQL Server Coalesce() function
'Patrick Honorez --- www.idevlop.com
Dim i As Integer
Coalesce = Null
For i = LBound(varValues) To UBound(varValues)
If Not IsNull(varValues(i)) Then
Coalesce = varValues(i)
Exit Function
End If
Next
End Function
答案 4 :(得分:2)
使用IsNull()
,Nz()
和数据转换函数是内置的VBA函数,只会减慢2003之前版本中的查询速度。就数据类型而言,使用{{1}保证您的数据类型,但仅当您需要进行强比较或仅在列上将format属性设置为Currency时。 IF语句最能减慢事情,因为它为你的例程增加了另一个功能
使用此解决方案:CCur()
唯一的时间Nz([Price], CCur(0))
将在Price为Null时执行,因此整体而言这可能是最快的。
关键是使用的总函数数量最少,查询执行得越快。
答案 5 :(得分:-1)
COALESCE或NULLIF函数是sql server上用于良好迁移访问的标准。 ISNULLor IIF或CHOOSE是非标准功能。