Что эквивалентно Select Case в Access SQL?
У меня есть запрос, который включает в себя поля с именем spreadбаланс и комиссионные. Я хотел бы вычислить значения для комиссий на основе балансировки, аналогично этому блоку Select Case
в Access VBA:
Select Case OpeningBalance
Case 0 To 5000
commission = 20
Case 5001 To 10000
commission = 30
Case 10001 To 20000
commission = 40
Case Else
commission = 50
End Select
Но так как Access не разрешает Select Case
в запросе, как я могу выполнить свою задачу в Access SQL?
Ответы
Ответ 1
Рассмотрим функцию переключателя в качестве альтернативы нескольким выражениям IIf()
. Он вернет значение из первой пары expression/value, где выражение оценивается как True и игнорирует любые оставшиеся пары. Эта концепция аналогична подходу SELECT ... CASE
, на который вы ссылаетесь, но недоступна в Access SQL.
Если вы хотите отобразить вычисленное поле как commission
:
SELECT
Switch(
OpeningBalance < 5001, 20,
OpeningBalance < 10001, 30,
OpeningBalance < 20001, 40,
OpeningBalance >= 20001, 50
) AS commission
FROM YourTable;
Если вы хотите сохранить это вычисленное значение в поле с именем commission
:
UPDATE YourTable
SET commission =
Switch(
OpeningBalance < 5001, 20,
OpeningBalance < 10001, 30,
OpeningBalance < 20001, 40,
OpeningBalance >= 20001, 50
);
В любом случае, вы можете найти Switch()
более понятное и управляемое. Множество IIf()s
может стать ошеломляющим по мере роста числа условий.
Ответ 2
Вы можете использовать IIF для аналогичного результата.
Обратите внимание, что вы можете вставлять инструкции IIF для обработки нескольких случаев. Здесь приведен пример: http://forums.devshed.com/database-management-46/query-ms-access-iif-statement-multiple-conditions-358130.html
SELECT IIf([Combinaison] = "Mike", 12, IIf([Combinaison] = "Steve", 13)) As Answer
FROM MyTable;
Ответ 3
Вы можете сделать следующее:
select
iif ( OpeningBalance>=0 And OpeningBalance<=500 , 20,
iif ( OpeningBalance>=5001 And OpeningBalance<=10000 , 30,
iif ( OpeningBalance>=10001 And OpeningBalance<=20000 , 40,
50 ) ) ) as commission
from table