ms-access - query - iif access
¿Cuál es el equivalente de Select Case en Access SQL? (3)
Tengo una consulta que incluye campos llamados saldo de apertura y comisiones . Me gustaría calcular los valores de las comisiones según el desequilibrio de apertura , similar a este bloque Select Case
en 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
Pero dado que Access no permite Select Case
en una consulta, ¿cómo puedo lograr mi objetivo en Access SQL?
Considere la función de cambio como una alternativa a múltiples expresiones IIf()
. Devolverá el valor del primer par de expresión / valor donde la expresión se evalúa como True e ignorará los pares restantes. El concepto es similar al enfoque SELECT ... CASE
al que se hace referencia pero que no está disponible en Access SQL.
Si desea mostrar un campo calculado como commission
:
SELECT
Switch(
OpeningBalance < 5001, 20,
OpeningBalance < 10001, 30,
OpeningBalance < 20001, 40,
OpeningBalance >= 20001, 50
) AS commission
FROM YourTable;
Si desea almacenar ese valor calculado en un campo llamado commission
:
UPDATE YourTable
SET commission =
Switch(
OpeningBalance < 5001, 20,
OpeningBalance < 10001, 30,
OpeningBalance < 20001, 40,
OpeningBalance >= 20001, 50
);
De cualquier manera, vea si encuentra que Switch()
más fácil de entender y administrar. Múltiples IIf()s
puede volverse alucinante a medida que crece la cantidad de condiciones.
Puedes hacerlo a continuación:
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
Puedes usar IIF para un resultado similar.
Tenga en cuenta que puede anidar las instrucciones IIF para manejar múltiples casos. Aquí hay un ejemplo: 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;