ORA-00905:缺少关键字 (Oracle SQL Live)

问题描述 投票:0回答:1

这是我的 Oracle SQL 查询:

SELECT 
    COUNT(CASE WHEN SAL IS NOT NULL THEN 1) AS SALARIED_DEPT30,
    COUNT(CASE WHEN COMM IS NOT NULL THEN 1) AS COMM_DEPT30
FROM
    EMP
WHERE 
    DEPTNO = 30;

我收到这条消息:

ORA-00905:缺少关键字

我错过了什么?

我的目标是查询列

DEPTNO
选择30并统计有多少员工有工资,并查询有多少人收到佣金。我正在尝试在一个查询中获取两个单独的计数(彼此独立)。

我试图避免的是:

SELECT COUNT(*)
FROM EMP
WHERE DEPTNO = 30 
  AND SAL IS NOT NULL 
  AND COMM IS NOT NULL;

在运行时,我不想收到仅包含 SAL 和 COMM 都不为 NULL 的员工的表。

sql oracle
1个回答
0
投票

CASE
表达式由
END
终止。

SELECT COUNT(CASE WHEN SAL IS NOT NULL THEN 1 END) AS SALARIED_DEPT30,
       COUNT(CASE WHEN COMM IS NOT NULL THEN 1 END) AS COMM_DEPT30
FROM   EMP
WHERE  DEPTNO = 30;

但是,聚合函数通常会忽略

NULL
值,因此您可以将其简化为:

SELECT COUNT(SAL) AS SALARIED_DEPT30,
       COUNT(COMM) AS COMM_DEPT30
FROM   EMP
WHERE  DEPTNO = 30;
© www.soinside.com 2019 - 2024. All rights reserved.