在THEN或ELSE子句

时间:2017-04-17 22:37:22

标签: sql-server ms-access nested case

我正在将当前的Microsoft Access进程转移到SQL SERVER 2016,我遇到了重写其中一个Access SQL查询的问题。当前的Access查询在set函数

中具有以下代码
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 Access函数与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

我已经回顾了其他嵌套案例的问题,但是在计算中的语句时我还没有看到嵌套案例的例子。

任何提示都将非常感谢

1 个答案:

答案 0 :(得分:0)

使用CASE

内的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