我在 Excel 中的查询的以下部分不起作用。
iif(master.[加拿大] 为 null 或 master.[美国] 为 null ,'USER','' ) as [Stackoverflow]
我的空值处理正确吗?
逻辑应该
1) 如果没有加拿大或美国数据,请在 Stackoverflow 列中输入“USER”。
2) 如果加拿大或美国有数据,则 Stackoverflow 应为空。
目前我得到的是:
+-----------+--------------+---------------+
| Canada | USA | Stackoverflow |
+-----------+--------------+---------------+
| | | |
| | | |
| 912796NZ8 | | |
| | | |
| | US912796NZ81 | |
| | | |
| 912796NZ8 | US912796NZ81 | |
| 912796NZ8 | US912796NZ81 | |
| 912796qd4 | US912796QD43 | |
| 298785HB5 | US298785HB50 | |
+-----------+--------------+---------------+
我的期望:
+-----------+--------------+---------------+
| Canada | USA | Stackoverflow |
+-----------+--------------+---------------+
| | | USER |
| | | USER |
| 912796NZ8 | | |
| | | USER |
| | US912796NZ81 | |
| | | USER |
| 912796NZ8 | US912796NZ81 | |
| 912796NZ8 | US912796NZ81 | |
| 912796qd4 | US912796QD43 | |
| 298785HB5 | US298785HB50 | |
+-----------+--------------+---------------+
将查询更改为 iif(TRIM(master.[Camada]) = '' OR TRIM(master.[USA]) = '','USER', '') as [Stackoverflow]
它做得很好,只是现在我仍然有一些加拿大和美国的数据为我提供USER
。
+-----------+-----+---------------+
| Canada | USA | Stackoverflow |
+-----------+-----+---------------+
| 62941ZPA6 | | USER |
| 62943Z4R0 | | USER |
| 62945ZLQ1 | | USER |
| 62950ZZE5 | | USER |
| 75585RLK9 | | USER |
| 00433JAA3 | | USER |
| 13509PEV1 | | USER |
| 13509PEZ2 | | USER |
| 62931ZLX2 | | USER |
| 62941Z8M9 | | USER |
| 62941ZYK4 | | USER |
| 62942ZV42 | | USER |
| 62943Z6T4 | | USER |
| 62946Z6Y0 | | USER |
| 62947ZWC8 | | USER |
| 62948ZTJ6 | | USER |
| 62949ZE51 | | USER |
| 75585RLK9 | | USER |
| 75585RMB8 | | USER |
| 75585RMW2 | | USER |
+-----------+-----+---------------+
这 20 条记录不应有 USER。
如有任何帮助,我们将不胜感激,谢谢。
最佳答案
Jet/ACE SQL 方言确实支持 IS NULL
。但是,正如您当前的结果所示,空字符串 (''
) 与 NULL
实体不同。在 Excel(一种非数据库应用程序,其中空单元格可能不会默认为 NULL
)中尤其如此。事实上,您实际上是在 IIF()
调用的 falsepart 中分配空字符串,其中 中没有 'USER'
值的记录[Stackoverflow] 将是空字符串,而不是 NULL
。
考虑扩展您的 IIF
表达式以考虑零长度字符串并将 NULL
分配给非匹配项:
IIF((master.[Canada] IS NULL AND master.[USA] IS NULL) OR
(master.[Canada] = '' AND master.[USA] IS NULL) OR
(master.[Canada] IS NULL AND master.[USA] = '') OR
(master.[Canada] = '' AND master.[USA] = ''), 'USER', NULL) As [Stackoverflow]
甚至使用 TRIM()
来考虑不可见的空白:
IIF((master.[Canada] IS NULL AND master.[USA] IS NULL) OR
(TRIM(master.[Canada]) = '' AND master.[USA] IS NULL) OR
(master.[Canada] IS NULL AND TRIM(master.[USA]) = '') OR
(TRIM(master.[Canada]) = '' AND TRIM(master.[USA]) = ''), 'USER', NULL) As [Stackoverflow]
关于SQL,iif excel单元格为空然后填充另一个excel单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52999457/