【问题标题】:Nested case statement sql嵌套case语句sql
【发布时间】:2015-07-03 23:00:39
【问题描述】:

我在用 SQL 编写 case 语句时遇到问题。我的第一个问题是:是否可以将下面的 if 语句写为 select 语句中的 SQL Query 中的 case 语句?

如果不是,请查看下面的案例声明并帮助/指导我进入有效格式。谢谢,非常感谢!

IF (var1 = 1){
do this1;
IF (var 1 = 2){
    Do this2;
    }Else{ 
    do something else1;
    }
Else if (Var 1 = 3){
    Do this3; 
    }Else{ 
    Do something else2;
    }   

这是我的案例陈述。我知道它不起作用,因为它不是有效的案例陈述。有人可以帮助我使其成为有效的案例陈述。提前致谢。

    SELECT
CASE
    WHEN apple.type = 1 OR apple.type = 2
    THEN basket.S1
    ELSE 
        CASE 
            WHEN apple.type = 0 AND basket.S2 is null
            THEN basket.S1
            ELSE basket.S2  
        ELSE 
            CASE
                WHEN apple.type = 3 and basket.s3 is null
                THEN basket.S1
                ELSE basket.S3
            END
        END
    END 
FROM .....
WHERE ..... 

【问题讨论】:

    标签: mysql sql sql-server


    【解决方案1】:

    我认为您的案例陈述过于复杂,看看您的第一个示例,您的案例陈述应该相当简单,

    类似......

    SELECT CASE 
               WHEN @Var1 = 1 THEN 'Something 1'
               WHEN @Var1 = 2 THEN 'Something 2'
               WHEN @Var1 = 3 THEN 'Something 3'
               ELSE 'Something Else'
           END 
    FROM .....
    WHERE .....
    

    你的case语句我们可以写这样的东西吗...

    SELECT
        CASE
            WHEN apple.[type] IN (1,2)
            THEN basket.S1
            WHEN apple.type = 0 AND basket.S2 is null
            THEN basket.S1
            WHEN apple.type = 3 and basket.s3 is null
            THEN basket.S1
            ELSE basket.S3
        END
    

    【讨论】:

    • 非常感谢!这也适用于一些调整。
    【解决方案2】:

    由于您要检查空值并替换非空值,您可以使用COALESCE function 缩短查询。

    SELECT
      CASE
        WHEN apple.type IN (1, 2) THEN basket.s1
        WHEN apple.type = 0 THEN COALESCE(basket.s2, basket.s1)
        WHEN apple.type = 3 THEN COALESCE(basket.s3, basket.s1)
      END
    FROM ...
    

    【讨论】:

      猜你喜欢
      • 2011-03-12
      • 1970-01-01
      • 2016-12-10
      • 2020-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多