首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在SQL Server中执行嵌套case语句逻辑的最佳方法

在SQL Server中执行嵌套case语句逻辑的最佳方法
EN

Stack Overflow用户
提问于 2009-02-03 01:39:04
回答 8查看 831.6K关注 0票数 212

我正在编写一个SQL查询,其中返回的一些列需要根据相当多的条件进行计算。

我目前使用的是嵌套的case语句,但它变得越来越混乱。有没有更好的(更有条理和/或更具可读性的)方法?

(我使用的是Microsoft SQL Server,2005)

一个简化的例子:

代码语言:javascript
复制
SELECT
    col1,
    col2,
    col3,
    CASE
        WHEN condition 
        THEN
            CASE
                WHEN condition1 
                THEN
                    CASE 
                        WHEN condition2
                        THEN calculation1
                        ELSE calculation2
                    END
                ELSE
                    CASE 
                        WHEN condition2
                        THEN calculation3
                        ELSE calculation4
                    END
            END
        ELSE 
            CASE 
                WHEN condition1 
                THEN 
                    CASE
                        WHEN condition2 
                        THEN calculation5
                        ELSE calculation6
                    END
                ELSE
                    CASE
                        WHEN condition2 
                        THEN calculation7
                        ELSE calculation8
                    END
            END            
    END AS 'calculatedcol1',
    col4,
    col5 -- etc
FROM table
EN

回答 8

Stack Overflow用户

发布于 2012-07-13 01:17:23

把所有的箱子都包起来。

代码语言:javascript
复制
SELECT
    col1,
    col2,
    col3,
    CASE
        WHEN condition1 THEN calculation1 
        WHEN condition2 THEN calculation2
        WHEN condition3 THEN calculation3
        WHEN condition4 THEN calculation4
        WHEN condition5 THEN calculation5
        ELSE NULL         
    END AS 'calculatedcol1',
    col4,
    col5 -- etc
FROM table
票数 103
EN

Stack Overflow用户

发布于 2013-05-31 19:45:44

您可以组合多个条件来避免这种情况:

代码语言:javascript
复制
CASE WHEN condition1 = true AND condition2 = true THEN calculation1 
     WHEN condition1 = true AND condition2 = false 
     ELSE 'what so ever' END,
票数 41
EN

Stack Overflow用户

发布于 2009-02-03 01:58:00

我个人就是这样做的,限制了嵌入的CASE表达式。我还会添加注释来解释正在发生的事情。如果它太复杂了,就把它分解成函数。

代码语言:javascript
复制
SELECT
    col1,
    col2,
    col3,
    CASE WHEN condition THEN
      CASE WHEN condition1 THEN
        CASE WHEN condition2 THEN calculation1
        ELSE calculation2 END
      ELSE
        CASE WHEN condition2 THEN calculation3
        ELSE calculation4 END
      END
    ELSE CASE WHEN condition1 THEN 
      CASE WHEN condition2 THEN calculation5
      ELSE calculation6 END
    ELSE CASE WHEN condition2 THEN calculation7
         ELSE calculation8 END
    END AS 'calculatedcol1',
    col4,
    col5 -- etc
FROM table
票数 33
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/505747

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档