2017-04-17 16 views
0

現在のMicrosoft AccessプロセスをSQL Server 2016に転送していて、Access SQLクエリの1つを書き直す際に問題が発生しています。現在のAccessクエリは、設定された関数内の次のコードTHENまたはELSE句の計算内のネストされたCASE WHENステートメント

b.New_AVM_Index = IIf(a.[AVM_Index]>0 
       ,a.[AVM_Index]*(IIf(a.[Stratified_Median_AVM]>0 
       ,IIf(b.[Stratified_Median_AVM]>0 
       ,b.[Stratified_Median_AVM]/a.[Stratified_Median_AVM] 
       ,1),1)),10000) 

式IIfアクセス機能は、SQLのCASE WHEN文で、と同じで多くを動作しますが、私の質問は、文のネストされたケースを処理するための最良の方法は何かということですがありますSQL ServerのTHEN句またはELSE句の下の計算では?以下は

成功せず、テーブルにNew_AVM_Index列を追加することで私の試みです:

CASE WHEN (a.[AVM_Index]>0 
       THEN a.[AVM_Index]* (WHEN(a.[Stratified_Median_AVM]>0 
       THEN WHEN (b.[Stratified_Median_AVM]>0 
       THEN b.[Stratified_Median_AVM]/a.[Stratified_Median_AVM] 
       ELSE 1 END) ELSE 1 END)) ELSE 10000) 
       END AS New_AVM_Index 

私は声明の質問は、しかし私は、ネストされた場合の例を見ていない他のネストされた場合を検討してきました計算の中で。

任意のヒントを大幅に

答えて

0

使用CASE

SELECT CASE WHEN a.[AVM_Index] > 0 
     THEN a.[AVM_Index] * (CASE WHEN a.[Stratified_Median_AVM] > 0 
           THEN (CASE WHEN b.[Stratified_Median_AVM] > 0 
              THEN b.[Stratified_Median_AVM]/a.[Stratified_Median_AVM] 
              ELSE 1 END 
            ) 
           ELSE 1 END) 
    ELSE 10000 
    END AS New_AVM_Index 
+0

はこのためにあなたに感謝の内部CASEをいただければ幸いです!完璧に動作します – da4l

+0

@ da4lうれしい私は助けることができます。 – BJones

関連する問題