MS Access SQL IIF оптимизация - PullRequest
1 голос
/ 26 марта 2012

Учитывая эту таблицу, у меня есть запрос, который использует IIF, чтобы извлечь значение из одного столбца, когда другой равен NULL.

COL_A,COL_B
NULL,10
12,NULL
14,NULL
NULL,16

SELECT iif(COL_A IS NULL, COL_B, COL_A);

Results:
10
12
14
16

То, что я пытаюсь выяснить, это как сделать это в прямом SQL. Есть ли способ сделать это? Обычно я не возражал бы использовать это несколько раз, но у нас есть массивный запрос с кашель 86 выражениями IIF, и он становится непозволительным для выполнения. Есть идеи?

Ответы [ 3 ]

4 голосов
/ 26 марта 2012

Вы можете использовать NZ()

 select nz(COL_A, COL_B)
1 голос
/ 28 марта 2012

Предполагая, что только один столбец будет иметь действительное значение, вы можете просто объединить их, так как значения NULL будут сжиматься.Выберите COL_A||COL_B||COL_C||COL_D||....

1 голос
/ 27 марта 2012

Если ваш запрос должен выполнить 86 различных тестов в одном запросе, то я бы предположил, что архитектура данных имеет недостатки, вы могли бы сократить свой SQL, написав пользовательскую функцию, используя метод "Case", который может пройти всю проверкуи вернуть результат.Однако это только улучшит внешний вид вашего SQL и не улучшит производительность.Трудно сказать без списка 86 ИИФ, но я думаю, что вам нужно взглянуть на свою структуру данных, чтобы посмотреть, сможете ли вы улучшить ситуацию на уровне таблицы.

...