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

问题描述:

我在练习一些SQL,并且必须从数据库中检索所有关于(sal + comm)> 1700的雇员的信息。我知道这可以用一个简单的WHERE表达式来完成,但我们正在练习CASE声明,所以我们需要这样做。SQL使用CASE表达式有条件地选择行

我已经知道常规CASE如何工作来赋值依赖于其他行值的新行值,但我不明白如何根据使用CASE表达式的条件来选择行。

这是我迄今取得:

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

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

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

谢谢,这就是我一直在寻找! –

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 

你想要一个WHERE子句。

SELECT empNo 
FROM emp 
WHERE sal+comm > 1700 
+3

@Elias明确表示,他知道如何在一个简单的'WHERE'子句中做到这一点,但想用'CASE' –