当前位置: 首页 > 面试题库 >

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

强化
2023-03-14
问题内容

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

我目前正在使用嵌套的case语句,但是它变得凌乱。有没有更好(更有条理和/或更易读)的方法?

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

一个简化的例子:

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

问题答案:

您可以尝试某种COALESCE技巧,例如:

SELECT COALESCE(
  CASE WHEN condition1 THEN calculation1 ELSE NULL END,
  CASE WHEN condition2 THEN calculation2 ELSE NULL END,
  etc...
)


 类似资料:
  • 可以将case statement作为外部case statement的语句序列的一部分。 即使内部和外部的case constants包含共同的值,也不会产生冲突。 语法 (Syntax) 嵌套case语句的语法如下 - case (ch1) of 'A': begin writeln('This A is part of outer case' ); cas

  • 它为集合中的每个元素重复一组语句。 此循环用于访问和操作数组或VB.Net集合中的所有元素。 此循环结构的语法是 - For Each element [ As datatype ] In group [ statements ] [ Continue For ] [ statements ] [ Exit For ] [ statements ] Next [ el

  • 可以将select语句作为外部select语句的语句序列的一部分。 即使内部和外部选择的case常量包含公共值,也不会产生冲突。 例子 (Example) Module decisions Sub Main() 'local variable definition Dim a As Integer = 100 Dim b As Integer = 200

  • 问题内容: 以下是我当前的SELECT CASE语句: 我并不总是想重复版本=’xxx’的条件,例如 在Excel中,这相当容易,但是如何在PostgreSQL中进行编译呢? 问题答案: 试试这个

  • 问题内容: 任何人都可以将下面的嵌套IIF解码为SQL中的CASE语句吗。我知道SQL Server 2012中允许使用IIF,但是我很难理解嵌套IIF逻辑。.以下是我的嵌套IIF语句 任何帮助深表感谢。 问题答案: 这应该是等效的:

  • 本文向大家介绍数据库中的SELECT语句逻辑执行顺序分析,包括了数据库中的SELECT语句逻辑执行顺序分析的使用技巧和注意事项,需要的朋友参考一下 引言   这不是一个什么多深的技术问题,多么牛叉的编程能力。这跟一个人的开发能力也没有非常必然的直接关系,但是知道这些会对你的SQL编写,排忧及优化上会有很大的帮助。它不是一个复杂的知识点,但是一个非常基础的SQL根基。不了解这些,你一直用普通水泥盖房