【问题标题】:Nested CASE WHEN statement within a calculation under the THEN or ELSE clause在 THEN 或 ELSE 子句下的计算中嵌套 CASE WHEN 语句
【发布时间】:2017-04-18 06:50:06
【问题描述】:

我正在将当前的 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 语句大致相同,但我的问题是在 SQL SERVER 中的 THEN 子句或 ELSE 子句下的计算中的语句时处理嵌套 case 的最佳方法是什么?

下面是我尝试将 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

我已经查看了另一个嵌套 case when 提问,但是我没有看到计算中的嵌套 case when 语句的示例。

任何提示将不胜感激

【问题讨论】:

    标签: sql-server ms-access nested case


    【解决方案1】:

    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
    

    【讨论】:

    • @da4l 很高兴我能提供帮助。
    猜你喜欢
    • 2016-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-12
    • 2018-03-20
    相关资源
    最近更新 更多