SQL 使用 CASE 表达式有条件地选择行

Posted

技术标签:

【中文标题】SQL 使用 CASE 表达式有条件地选择行【英文标题】:SQL select rows conditionally using CASE expression 【发布时间】:2016-03-01 18:16:18 【问题描述】:

我正在练习一些 SQL,我必须从数据库中检索 (sal+comm) > 1700 的员工的所有信息。我知道这可以通过简单的 WHERE 表达式来完成,但我们正在练习 CASE 语句,所以我们需要这样做。

我已经知道常规 CASE 如何根据其他行值分配新行值,但我不明白如何使用 CASE 表达式根据条件选择行。

这是我迄今为止所取得的成就:

SELECT
    CASE
        WHEN (sal+comm) > 1700 THEN empno
    END AS empno
FROM emp;

我知道这是错误的,但我被困在这里。任何帮助或任何搜索和阅读的资源将不胜感激,谢谢!

【问题讨论】:

【参考方案1】:
SELECT *
FROM emp
WHERE (CASE WHEN (sal+comm) > 1700 THEN 1
            ELSE 0
       END) = 1

【讨论】:

【参考方案2】:

CASE 语句将产生一个结果,您可以比较它或将其用于其他操作。

在这种情况下,工资取决于 emp.job

SELECT *
FROM emp
WHERE CASE WHEN emp.job = 'DEVELOPER' THEN salary*1.5
           WHEN emp.job = 'DB' THEN salary*2
      END > 1700

解决你的情况有点过头了,但我想你可以包括其他情况。

SELECT *
FROM emp
WHERE CASE WHEN sal+comm > 1700 THEN 1
           ELSE 0
      END > 0

【讨论】:

【参考方案3】:

你想要一个 WHERE 子句。

SELECT empNo
FROM emp
WHERE sal+comm > 1700

【讨论】:

@Elias 特意说在简单的WHERE 子句中他知道怎么做,但是想用CASE 来练习

以上是关于SQL 使用 CASE 表达式有条件地选择行的主要内容,如果未能解决你的问题,请参考以下文章

SQL语句中case,when,then的用法

SQL语句中Case 的用法

SQL 案例分析:CASE 条件表达式

条件语句&CASE表达式语法

是否有任何规则可以在条件/案例表达式中使用sql语句子句的哪一部分?

CASE 表达式 - 在 WHEN 部分再添加一个条件