首页 > 解决方案 > SQL 查询以获取特定部门的具有 null 和非 null 佣金值的员工

问题描述

该表是emp。查询的输入是 comm。如果输入的值是 300,那么 How to fetch 有佣金 300 或 null 且属于 deptno 30 的员工,对于所有其他部门,佣金应仅为 300。对于除 30 以外的所有其他 deptno,如果 comm 为空,则不应获取它们。

像下面的东西。

SELECT
    *
FROM
    emp a
    WHERE
    a.comm in(
        CASE a.deptno
            WHEN 30 THEN
                (300, NULL)
            ELSE 300
        END
    );

标签: sqloracle

解决方案


您需要使用以下OR条件:

WHERE ( (DEPTNO = 30 AND (COMM IS NULL OR COMM = 300) )
      OR (DEPTNO <> 30 AND COMM = 300) )
      -- OR COMM = 300) -- AS EXPLAINED BELOW

在这里,您可以省略条件DEPTNO <> 30,但我个人在这种情况下使用这种做法以避免任何问题。(您的情况很简单,但在复杂情况下,使用否定条件非常重要)


推荐阅读