SQL, iif excel 单元格为空则填充另一个 excel 单元格

SQL, iif excel cell is null then fill another excel cell

我在 excel 中有以下查询部分不起作用。

iif(master.[Canada] is null or master.[USA] is null ,'USER','' ) as [Whosebug]

我是否正确执行了空值?

逻辑应该

1) 如果没有加拿大或美国数据,请在 Whosebug 列中输入 "USER"。

2) 如果加拿大或美国有数据,那么 Whosebug 应该是空的。

目前我得到的是:

+-----------+--------------+---------------+
|  Canada   |     USA      | Whosebug |
+-----------+--------------+---------------+
|           |              |               |
|           |              |               |
| 912796NZ8 |              |               |
|           |              |               |
|           | US912796NZ81 |               |
|           |              |               |
| 912796NZ8 | US912796NZ81 |               |
| 912796NZ8 | US912796NZ81 |               |
| 912796qd4 | US912796QD43 |               |
| 298785HB5 | US298785HB50 |               |
+-----------+--------------+---------------+

我期待的是:

+-----------+--------------+---------------+
|  Canada   |     USA      | Whosebug |
+-----------+--------------+---------------+
|           |              | USER          |
|           |              | USER          |
| 912796NZ8 |              |               |
|           |              | USER          |
|           | US912796NZ81 |               |
|           |              | USER          |
| 912796NZ8 | US912796NZ81 |               |
| 912796NZ8 | US912796NZ81 |               |
| 912796qd4 | US912796QD43 |               |
| 298785HB5 | US298785HB50 |               |
+-----------+--------------+---------------+

将查询更改为 iif(TRIM(master.[Camada]) = '' OR TRIM(master.[USA]) = '','USER', '') as [Whosebug]

它做得很好,除了现在我还有一些加拿大和美国的数据可以给我 USER

+-----------+-----+---------------+
|  Canada   | USA | Whosebug |
+-----------+-----+---------------+
| 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 使用 IsNull() 函数而不是 IS NULL 运算符:

iif(IsNull(master.[Canada]) or IsNull(master.[USA]),'USER','' ) as [Whosebug]

Jet/ACE SQL 方言支持 IS NULL。但是,正如您当前的结果所暗示的那样,空字符串 ('') 与 NULL 实体不同。在 Excel 中尤其如此(一个非数据库应用程序,空单元格可能不会默认为 NULL)。实际上,您实际上是在 IIF() 调用的 falsepart 中分配空字符串,其中 [Whosebug][= 中没有 'USER' 值的记录30=] 将是空字符串而不是 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 [Whosebug]

甚至可以使用 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 [Whosebug]