同一选择SQL中不同行的不同大小写条件

时间:2016-10-07 09:02:04

标签: sql teradata case-when

我想做以下

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'关键字。 ,关于如何做到这一点的任何线索?如何在同一选择中使用多个案例?我不想使用子查询和内部联接。

谢谢

3 个答案:

答案 0 :(得分:3)

试试这个。您在声明中写了额外的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

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

正如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