我试图从连接创建一个表,并基于id总结一些字段.这部分工作得很好.我还试图添加一个额外的列并使用case语句我想填充它.
这是脚本
CREATE TABLE TABLE1
AS
SELECT ID, IDC, SUM(AMOUNT) PRICE, SUM(COST) COST, SUM(AMOUNT-COST) PROFIT,
CASE PROFIT
WHEN PROFIT < 1000 THEN 'Low'
WHEN PROFIT < 5000 THEN 'Medium'
ELSE 'High'
END AS PROFITLEVEL
FROM
(SELECT DISTINCT ID, IDC, AMOUNT, COST
FROM ORDER_ITEMS
LEFT JOIN ORDERS
ON ID = IDC)
GROUP BY ID, IDC;
Run Code Online (Sandbox Code Playgroud)
但是,这会返回ORA-00905:缺少关键字错误.
任何帮助,将不胜感激
你正在CASE以错误的方式使用它; 此外,您尝试PROFIT在定义它的同一级别使用别名.
您需要编辑CASE并使用表示PROFIT而不是别名的表达式PROFIT:
CREATE TABLE TABLE1 AS
SELECT ID,
IDC,
SUM(AMOUNT) PRICE,
SUM(COST) COST,
SUM(AMOUNT - COST) PROFIT,
CASE
WHEN SUM(AMOUNT - COST) < 1000 THEN 'Low'
WHEN SUM(AMOUNT - COST) < 5000 THEN 'Medium'
ELSE 'High'
END AS PROFITLEVEL
FROM (SELECT DISTINCT ID,
IDC,
AMOUNT,
COST
FROM ORDER_ITEMS LEFT JOIN ORDERS ON ID = IDC)
GROUP BY ID, IDC;
Run Code Online (Sandbox Code Playgroud)
CASE如果您需要检查单个值,您尝试使用它的方式很有用; 例如:
select level,
case level
when 1 then 'one'
when 2 then 'two'
else 'other'
end
from dual
connect by level <=3
Run Code Online (Sandbox Code Playgroud)