2017-04-17 182 views
0

我将当前的Microsoft Access过程传输到SQL SERVER 2016,并且遇到了重写其中一个Access SQL查询的问题。当前访问查询有一组功能在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) 

国际金融研究所访问功能的工作原理大致在相同的SQL CASE WHEN语句,但我的问题是什么时,语句来处理嵌套的情况下,最好的方法中的以下代码在THEN子句或SQL SERVER中的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

使用CASECASE

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

感谢你在这里面!完美的作品 – da4l

+0

@ da4l很高兴我能帮上忙。 – BJones