使用sql查询无法在嵌套情况下为列名设置别名

时间:2017-04-11 09:48:01

标签: mysql sql

在此代码中,它能够单独为每个case语句添加别名,如

SELECT 
    id, 
    SUM(CASE 
           WHEN (a.place = 'CHN' AND a.salary = 20000)  
              THEN '1' 
              ELSE '0' 
        END) AS '20K Salary',
    SUM(CASE 
           WHEN (a.place = 'CHN' and a.salary = 35000)  
              THEN '1' 
              ELSE '0' 
        END) AS '35K Salary'
FROM Employee a;

但是当使用嵌套的CASE语句时,

SELECT 
    id, 
    SUM(CASE 
           WHEN (a.place = 'CHN') 
              THEN (CASE 
                       WHEN a.salary = 20000  
                          THEN '1' 
                          ELSE '0' 
                    END) AS '20K Salary',
                   (CASE 
                       WHEN a.salary = 35000  
                          THEN '1' 
                          ELSE '0' 
                    END) AS '35K Salary'
        END) 
FROM Employee a;

无法执行查询

2 个答案:

答案 0 :(得分:0)

在第一组代码中,每个case语句都是SELECT列表的一部分(即它们在SELECT之后的逗号分隔列表中),因此每个语句都返回一列。在第二组代码中,SELECT列表中只有一个case语句,它嵌套的事实对此没有影响。嵌套大小写的语法也不正确,因为THEN部分后跟两个用逗号分隔的表达式,这是不允许的。

答案 1 :(得分:0)

当然,这可以做你想要的。您想要创建两个列,因此每个列都需要自己的逻辑和自己的别名:

SELECT id, 
       SUM(CASE WHEN a.place = 'CHN' AND a.salary = 20000 THEN 1 ELSE 0 
           END) as Salary_20K,
       SUM(CASE WHEN a.place = 'CHN' AND a.salary = 35000 THEN 1 ELSE 0 
           END) as Salary_35K
FROM Employee a;

注意:不要将数字常量放在单引号中。仅对字符串和日期常量使用单引号。