在Oracle SQL文档中找到了这个条件:
NVL(salary, 0) + NVL(salary + (salary*commission_pct, 0) > 25000)
https://docs.oracle.com/database/122/SQLRF/About-SQL-Conditions.htm#SQLRF52101
它解释说,“以下复杂条件将工资值添加到commission_pct值(将值0替换为null)并确定总和是否大于数字常量25000:”。 但是当我尝试执行它时,它会抛出一个错误,
'缺少正确的父母'。
这个条件有效吗?还是有其他方法来执行它。
SELECT NVL(salary, 0) + NVL(salary + (salary*commission_pct, 0) > 25000) FROM HR.Employees;
任何帮助将不胜感激,谢谢。
答案 0 :(得分:2)
该条件旨在用于WHERE
子句,而不是SELECT
:
SELECT e.*
FROM HR.Employees
WHERE NVL(salary, 0) + NVL(salary + salary*commission_pct, 0) > 25000 ;
(这也会调整括号。)
两次加薪是没有意义的。据推测,预期的逻辑是:
WHERE NVL(salary, 0) + NVL(salary*commission_pct, 0) > 25000 ;
但是,我会把它写成:
SELECT e.*
FROM HR.Employees
WHERE COALESCE(salary, 0) * (1 + COALESCE(commission_pct, 0)) > 25000 ;
答案 1 :(得分:2)
这似乎是一个文档错误;即使在12cR2 documentation它仍然说:
NVL(salary, 0) + NVL(salary + (salary*commission_pct, 0) > 25000)
而不是
NVL(salary, 0) + NVL(salary*commission_pct, 0) > 25000
或
NVL(salary + salary*commission_pct, 0) > 25000
或(更接近原版,虽然这看起来像是一件奇怪的事情想要找到)
NVL(salary, 0) + NVL(salary + salary*commission_pct, 0) > 25000
或其他一些有效的变体,取决于它应该检查的内容......
正如其他人已经指出它是条件,所以它进入where
子句,而不是选择列表。
答案 2 :(得分:0)
是即可。在撰写此答案时,这是一个文档错误。
你应该在where子句中使用这个条件,而不是选择,删除一些大括号。
<html>
<head>
<style type="text/css">
header {
position:relative;
z-index:5;
}
.dropdown {
background-color: yellow;
width: 100px;
height: 100px;
position: absolute;
z-index: -1;
}
.background {
position: absolute;
background-color:#ccca;
border-bottom: 1px solid black;
width: 100%;
height: 50px;
z-index: auto;
}
</style>
</head>
<body>
<header>
<div class="background">
<div class="dropdown">
</div>
</div>
</header>
</body>
</html>
然而,这是一个比较合适的逻辑。
SELECT
*
FROM
hr.employees
WHERE
nvl(salary,0) + nvl(salary + salary * commission_pct,0) > 25000;