Подтвердить что ты не робот

Что эквивалентно 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?

4b9b3361

Ответ 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