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

标签 sql jet iif

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

相关文章:

c - 需要解决这个错误

c# - 为什么这个内联if错了?

mysql - 是否可以从 MySQL 中的查询结果创建计算行?

mysql - sql数据查询尝试写法

sql - 如何在 where 子句中使用我的别名?

javascript - 甲骨文JET : Passing asynchronous property to composite

ms-access - 如何在Access 2010 VBA中封装IIF和ISNULL调用?

ms-access - 在 Access 中的 IIf 函数中,如何分配空值?

sql - Postgres 中的 RIGHT() 函数不正确

php - Laravel SQLSTATE[23000] : Integrity constraint violation: 1452 Cannot add or update a child row