在此代码中,它能够单独为每个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;
无法执行查询
答案 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;
注意:不要将数字常量放在单引号中。仅对字符串和日期常量使用单引号。