在此代码中,它能够分别为每个 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;
无法执行查询
在第一组代码中,每个 case 语句都是 SELECT 列表的一部分(即它们位于 SELECT 之后的逗号分隔列表中),因此每个语句都返回一列。在第二组代码中,SELECT 列表中只有一个 case 语句,它是嵌套的事实对此没有影响。此外,嵌套案例的语法不正确,因为 THEN 部分后跟两个用逗号分隔的表达式,这是不允许的。
当然,这可以做你想做的事。 您希望创建两列,因此每列都需要自己的逻辑和别名:
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;
注意:不要将数字常量放在单引号中。 仅对字符串和日期常量使用单引号。