Доступ / реактивный эквивалент декодирования Oracle - PullRequest
3 голосов
/ 19 ноября 2009

Есть ли эквивалент для декодирования Oracle () в Access (или Jet, если на то пошло).

Проблема, с которой я сталкиваюсь: я должен отсортировать (упорядочить) набор результатов, основанный в основном на статус и дата (со всеми записями, имеющими статус = 2) в конце.

В Oracle я бы пошел что-то вроде

select
  ...
from
  ...
where
  ..
order by
  decode(status, 2, 0, 1),
  date_column

Ответы [ 4 ]

5 голосов
/ 19 ноября 2009

Наиболее близкой аналогией является функция SWITCH(), например.

Oracle:

SELECT supplier_name,
       decode(supplier_id,  10000, 'IBM',
                            10001, 'Microsoft',
                            10002, 'Hewlett Packard',
                                   'Gateway') result
  FROM suppliers;

Доступ к базе данных Engine

SELECT supplier_name,
       SWITCH(supplier_id = 10000, 'IBM',
              supplier_id = 10001, 'Microsoft',
              supplier_id = 10002, 'Hewlett Packard',
              TRUE, 'Gateway') AS result
  FROM suppliers; 

Обратите внимание, что с функцией SWITCH() вы должны каждый раз указывать полный предикат, поэтому вы не ограничены использованием только supplier_id. В качестве значения по умолчанию используйте предикат, который очевиден для читателя-человека: TRUE, например 1 = 1 или просто TRUE:)

Что-то, что может быть неочевидным, заключается в том, что логика в функции SWITCH() не закорачивает, а это означает, что каждое выражение в функции должно быть в состоянии вычисляться без ошибок. Если вам требуется логика для короткого замыкания, вам нужно использовать вложенные функции IIF().

1 голос
/ 19 ноября 2009

Вы можете попробовать с IIF. См. этот вопрос stackoverflow.

0 голосов
/ 27 апреля 2016

Вы можете использовать функцию SWITCH:

LABEL: Switch(
   [TABLE_NAME]![COL_NAME]='VAL1';'NEW_VAL1';
   [TABLE_NAME]![COL_NAME]='VAL2';'NEW_VAL2';
)

Обратите внимание на точки с запятой, а не запятые.

Приведенный выше пример работает в запросах в MS Access 2010.

0 голосов
/ 19 ноября 2009

Я думаю, что это может сравниться с переключением или выбором.

Switch(expr-1, value-1[, expr-2, value-2 … [, expr-n,value-n]])

- http://office.microsoft.com/en-us/access/HA012289181033.aspx

Choose(index, choice-1[, choice-2, ... [, choice-n]])

- http://msdn.microsoft.com/en-us/library/aa262690%28VS.60%29.aspx

...