【问题标题】:SQL select rows conditionally using CASE expressionSQL 使用 CASE 表达式有条件地选择行
【发布时间】: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;

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

【问题讨论】:

    标签: sql oracle case


    【解决方案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 来练习
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-10
        • 2020-07-03
        • 1970-01-01
        相关资源
        最近更新 更多