Oracle 数据库 SQL 查询失败
Oracle DB SQL Query Failing
SQL 查询有问题。
查询如下:
SELECT employee_id,
last_name,
first_name,
TO_DATE('31-DEC-01') - hire_date as "days_with_company",
salary*12 as "annual_salary",
(CASE WHEN "days_with_company" < 720 THEN "annual_salary"*0.1
WHEN "days_with_company" >= 720 AND "days_with_company" < 1440 THEN "annual_salary"*0.2
ELSE "annual_salary"*0.3 END) as "bonus",
("annual_salary" + "bonus") as "total_compensation"
FROM employees;
但我收到以下错误:
ORA-00904: "bonus": invalid identifier
00904. 00000 - "%s: invalid identifier"
*Cause:
*Action:
Error at Line: 9 Column: 28
当我查找 error 时,似乎我做错了什么!
请指教
"bonus" 是在您尝试使用它的同一个 SQ 语句中生成的。 ("annual_salary" + "奖金") 为 "total_compensation"
那是不允许的。下面将它分开成一个单独的select语句。
WITH
aset
AS
(SELECT employee_id
, last_name
, first_name
, TO_DATE ('31-DEC-01') - hire_date AS "days_with_company"
, salary * 12 AS "annual_salary"
, (CASE
WHEN "days_with_company" < 720
THEN
"annual_salary" * 0.1
WHEN "days_with_company" >= 720
AND "days_with_company" < 1440
THEN
"annual_salary" * 0.2
ELSE
"annual_salary" * 0.3
END) AS "bonus"
FROM employees)
SELECT aset.*, ("annual_salary" + "bonus") AS "total_compensation"
FROM aset;
我会三思而后行,将所有列名称括在双引号中。只需使用 Oracle 的默认值即可。 Oracle 将不在双引号中的对象名称视为大写,而不考虑大小写。这很简单,直接,并且在混合大小写滑入时消除了很多痛苦。
SQL 查询有问题。
查询如下:
SELECT employee_id,
last_name,
first_name,
TO_DATE('31-DEC-01') - hire_date as "days_with_company",
salary*12 as "annual_salary",
(CASE WHEN "days_with_company" < 720 THEN "annual_salary"*0.1
WHEN "days_with_company" >= 720 AND "days_with_company" < 1440 THEN "annual_salary"*0.2
ELSE "annual_salary"*0.3 END) as "bonus",
("annual_salary" + "bonus") as "total_compensation"
FROM employees;
但我收到以下错误:
ORA-00904: "bonus": invalid identifier
00904. 00000 - "%s: invalid identifier"
*Cause:
*Action:
Error at Line: 9 Column: 28
当我查找 error 时,似乎我做错了什么!
请指教
"bonus" 是在您尝试使用它的同一个 SQ 语句中生成的。 ("annual_salary" + "奖金") 为 "total_compensation" 那是不允许的。下面将它分开成一个单独的select语句。
WITH
aset
AS
(SELECT employee_id
, last_name
, first_name
, TO_DATE ('31-DEC-01') - hire_date AS "days_with_company"
, salary * 12 AS "annual_salary"
, (CASE
WHEN "days_with_company" < 720
THEN
"annual_salary" * 0.1
WHEN "days_with_company" >= 720
AND "days_with_company" < 1440
THEN
"annual_salary" * 0.2
ELSE
"annual_salary" * 0.3
END) AS "bonus"
FROM employees)
SELECT aset.*, ("annual_salary" + "bonus") AS "total_compensation"
FROM aset;
我会三思而后行,将所有列名称括在双引号中。只需使用 Oracle 的默认值即可。 Oracle 将不在双引号中的对象名称视为大写,而不考虑大小写。这很简单,直接,并且在混合大小写滑入时消除了很多痛苦。