J'ai une requête qui inclut des champs nommés openingbalance et commissions. Je voudrais calculer les valeurs pour commissions sur la base de openingbalance, semblable à ceci Select Case
bloc dans 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
Mais puisque Access ne permet pas Select Case
dans une requête, comment puis-je atteindre mon objectif dans Access SQL?
Considérez le Changer de fonction comme alternative à plusieurs expressions IIf()
. Il renverra la valeur de la première paire expression/valeur où l'expression est évaluée comme True et ignore toutes les paires restantes. Le concept est similaire à l'approche SELECT ... CASE
À laquelle vous avez fait référence, mais qui n'est pas disponible dans Access SQL.
Si vous souhaitez afficher un champ calculé sous la forme commission
:
SELECT
Switch(
OpeningBalance < 5001, 20,
OpeningBalance < 10001, 30,
OpeningBalance < 20001, 40,
OpeningBalance >= 20001, 50
) AS commission
FROM YourTable;
Si vous souhaitez stocker cette valeur calculée dans un champ nommé commission
:
UPDATE YourTable
SET commission =
Switch(
OpeningBalance < 5001, 20,
OpeningBalance < 10001, 30,
OpeningBalance < 20001, 40,
OpeningBalance >= 20001, 50
);
De toute façon, voyez si vous trouvez Switch()
plus facile à comprendre et à gérer. Plusieurs IIf()s
peuvent devenir ahurissants à mesure que le nombre de conditions augmente.
Vous pouvez utiliser IIF pour un résultat similaire.
Notez que vous pouvez imbriquer les instructions IIF pour gérer plusieurs cas. Il y a un exemple ici: 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;
Vous pouvez faire ci-dessous:
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