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 Case
niet 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()s
kan 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