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]
我在 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]