【问题标题】:Different case conditions on different rows in same select SQL同一选择 SQL 中不同行的不同大小写条件
【发布时间】:2017-02-16 05:26:54
【问题描述】:

我想做以下事情

Sel column1, 
           (CASE WHEN column1=x then 1
           ELSE
           2
           end) AS Key1,
           (CASE WHEN column2 =y then 1
           CASE WHEN column2 = z then 2 
           ELSE 
           3
           END) AS Key2
FROM table x

但它给了我语法错误,预计在整数和“CASE”关键字之间有一个“END”关键字。 ,关于如何做到这一点的任何线索?如何在同一个选择上使用多个案例?我不想使用子查询和内部连接。

谢谢

【问题讨论】:

标签: sql teradata case-when


【解决方案1】:

试试这个。你在声明中写了额外的case

这一行出错

CASE WHEN column2 = z then 2

正确查询

  Sel column1, 
               (CASE WHEN column1=x then 1
               ELSE
               2
               end) AS Key1,
               CASE WHEN column2 =y then 1
               WHEN column2 = z then 2 
               ELSE 
               3
               END) AS Key2
    FROM table x

【讨论】:

  • 谢谢,我只是弄乱了语法。
【解决方案2】:

CASE 表达式中使用多个WHEN 条件时,语法为:

CASE
    WHEN <condition> THEN <result>
    WHEN <condition> THEN <result>
    ELSE
END

在您的情况下,您必须删除第二个 CASE 表达式中的第二个 CASE 关键字:

SELECT
    column1,
    (CASE
        WHEN column1 = x THEN 1
        ELSE 2
    END) AS Key1,
    (CASE
        WHEN column2 = y THEN 1
        WHEN column2 = z THEN 2
        ELSE 3
    END) AS Key2
FROM tableX

【讨论】:

    【解决方案3】:

    正如 XING 已经回答的那样,问题是您原始查询中的一个额外 CASE。

    您还可以使用另一种较少冗余的 CASE 语法(您不需要一遍又一遍地重复列的名称)。

    SELECT column1, 
    
         CASE column1 
           WHEN x THEN 1
           ELSE 2
         END AS Key1,
    
         CASE column2  
           WHEN y then 1
           WHEN z then 2 
           ELSE 3
          END AS Key2
    
    FROM table x
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-26
      • 1970-01-01
      • 2011-03-31
      • 2015-12-08
      • 1970-01-01
      • 2010-10-03
      • 1970-01-01
      • 2014-01-19
      相关资源
      最近更新 更多