SQL, если ячейка Excel пуста, заполните другую ячейку Excel - PullRequest
0 голосов
/ 26 октября 2018

У меня есть следующая часть моего запроса в Excel, которая не работает.

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

Правильно ли я делаю нули?

Логика должна

1) Если нет данных «Канада» или «США», введите «USER» в столбец Stackoverflow.

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 записей.

Любая помощь будет оценена, спасибо.

Ответы [ 2 ]

0 голосов
/ 26 октября 2018

Jet / ACE SQL диалект поддерживает IS NULL.Однако, как показывают ваши текущие результаты, пустые строки ('') не совпадают с сущностью NULL.Это особенно верно в Excel (приложение без базы данных, где пустые ячейки могут по умолчанию не NULL).Фактически вы фактически присваиваете пустые строки в falsepart вашего IIF() вызова, где записи без значения '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]
0 голосов
/ 26 октября 2018

Я думаю, Jet использует функцию IsNull() вместо оператора IS NULL:

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