web-dev-qa-db-ja.com

Access SQLのSelect Caseと同等のものは何ですか?

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で目標を達成するにはどうすればよいですか?

33
Kelly K.

複数の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は、条件の数が増えると気が遠くなる可能性があります。

55
HansUp

同様の結果を得るために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;
5
RedFilter

以下を行うことができます:

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
1
Victor