openingbalanceおよびcommissionsという名前のフィールドを含むクエリがあります。 commissionsに基づいてopeningbalanceに似た値を計算したいこの 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で目標を達成するにはどうすればよいですか?
複数のIIf()
式の代替として Switch Function を検討してください。式が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
は、条件の数が増えると気が遠くなる可能性があります。
同様の結果を得るために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;
以下を行うことができます:
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