Wat is het equivalent van Case selecteren in Access SQL?

Ik heb een vraag met velden met de naam openingssaldoen commissies. Ik zou graag waarden voor commissieswillen berekenen op basis van openingssaldo, vergelijkbaar met dit Select Case-blok in 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

Maar aangezien Access Select Caseniet toestaat in een query, hoe kan ik mijn doel bereiken in Access SQL?


Antwoord 1, autoriteit 100%

Beschouw de schakelfunctieals een alternatief voor meerdere IIf()-expressies. Het retourneert de waarde van het eerste expressie/waarde-paar waarbij de expressie als True wordt geëvalueerd, en negeert eventuele resterende paren. Het concept is vergelijkbaar met de SELECT ... CASE-benadering waarnaar u verwijst, maar die niet beschikbaar is in Access SQL.

Als u een berekend veld wilt weergeven als commission:

SELECT
    Switch(
        OpeningBalance < 5001, 20,
        OpeningBalance < 10001, 30,
        OpeningBalance < 20001, 40,
        OpeningBalance >= 20001, 50
        ) AS commission
FROM YourTable;

Als u die berekende waarde wilt opslaan in een veld met de naam commission:

UPDATE YourTable
SET commission =
    Switch(
        OpeningBalance < 5001, 20,
        OpeningBalance < 10001, 30,
        OpeningBalance < 20001, 40,
        OpeningBalance >= 20001, 50
        );

Zie of u u vindt Switch()gemakkelijker te begrijpen en te beheren. Meerdere IIf()skan mind-boggling worden als het aantal omstandigheden groeit.


Antwoord 2, Autoriteit 7%

U kunt iif gebruiken voor een vergelijkbaar resultaat.

Merk op dat u de IIF-verklaringen kunt nestelen om meerdere zaken te behandelen. Er is hier een voorbeeld: 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;

Antwoord 3

U kunt hieronder doen:

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

Other episodes