2013-04-02 16 views
25

Açlık denetimi ve komisyonları komisyonları içeren bir sorgum var. Ben Erişim VBA bu Select Case bloğuna benzer openingbalance dayalı komisyon ilişkin değerlerin hesaplanması istiyorum: Access SQL'deki Select Case seçeneğinin karşılığı nedir?

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 

Ama Erişim beri

bir sorguda Select Case izin vermez, nasıl benim hedefinize, Access SQL'de?

cevap

42

katına IIf() ifadeler alternatif olarak Switch Function düşünün aşağıda bir örnek yoktur. Değer, ifadenin True olarak değerlendirildiği ilk ifade/değer çiftinden döndürür ve kalan çiftleri yok sayar. Kavram, başvurulan ancak Access SQL'de bulunmayan SELECT ... CASE yaklaşımına benzer.

Eğer commission olarak hesaplanan bir alan görüntülemek istiyorsanız:

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

Eğer commission adlı bir alana hesapladı değeri saklamak isterseniz:

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

Ya yol, olmadığını görmek Anlamak ve yönetmek için Switch()'u daha kolay bulabilirsiniz. Birden fazla IIf()s, koşulların sayısı arttıkça akıl almaz hale gelebilir.

+1

HansUp en iyisisiniz. Anahtar işlevi harika çalışıyor. Teşekkürler –

+3

+1 'IIF'den çok daha iyi. – RedFilter

5

Benzer bir sonuç için IIF'yi kullanabilirsiniz.

IIF deyimlerini birden çok durumda işlemek için yuvalayabileceğinizi unutmayın. Aşağıdaki yapabilirdi 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; 
+2

RedFilter yanıtı için teşekkürler, bu başka bir sorgu için mükemmeldir, yalnızca 2 if deyimini birleştirmek için ihtiyaç duyduğum yerde çalışıyorum. 4 ay önce Access'i kullanmaya başladığımdan beri HansUp'ın önerdiği anahtar işlevinin daha kolay okunabileceğini düşünüyorum. –

1

:

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 
İlgili konular