sql - 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
);
解决方案
您需要使用以下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
,但我个人在这种情况下使用这种做法以避免任何问题。(您的情况很简单,但在复杂情况下,使用否定条件非常重要)
推荐阅读
- r - 使用 Rcpp 将矩阵四舍五入到任意精度
- ios - 托管 AUv3 音频扩展并连接到参数树
- excel - 用于创建数据透视表的过程调用或参数无效
- python - 图像未从 ImageField 加载
- java - 如何读取两个分隔符之间的文件并将内容保存到字符串数组
- laravel - 静态 nginx 本地安装
- c# - 触发属性 IsMouseOver 无法识别或无法访问?
- javascript - 如何使用变量设置BadgeText
- firebase - 如何解决“错误:无法使用可用凭据初始化 Google Cloud Firestore 客户端。”?
- javascript - Vue 中的多个动态 HTML 参数