我在Access中有以下SQL查询:
SELECT ID, CurrencyName + ' (' + CurrencySymbol + ')' AS [Currency],
CurrencyLocation, CurrencySymbol FROM Currencies ORDER BY SortOrder
我注意到,除非字段CurrencySymbol
保留NULL
或为空,否则我会得到一个完整的结果表。如果CurrencySymbol
字段为空,而不是连接任何内容,则Access会跳过记录并继续,如下所示
我出错了还是有更好的方法来编写此查询?
答案 0 :(得分:4)
如果您使用+
连接字符串,string + NULL
会产生NULL
。
如果您使用&
连接字符串,string & NULL
会产生string
。
因此,您有两种方法可以解决此问题:
选项1:CurrencyName + ' (' + Nz(CurrencySymbol, '') + ')'
。 Nz(NullToZero)将Null值转换为第二个参数。
选项2:CurrencyName & ' (' & CurrencySymbol & ')'
您可以使用此事实创建一个表达式,该表达式仅在存在货币符号时显示括号(此构思的信用转到this blog post):
CurrencyName & (' (' + CurrencySymbol + ')')
将产生Points
和Euro (€)
。
答案 1 :(得分:3)
这是因为连接字符串和NULL会导致NULL。
SELECT ID, CurrencyName + ' (' + Iif(IsNull(CurrencySymbol), '', CurrencySymbol) + ')'
AS [Currency], CurrencyLocation, CurrencySymbol
FROM Currencies
ORDER BY SortOrder