CASE WHEN之后的GROUP BY

Aka*_*shi 5 sql oracle

我试图从连接创建一个表,并基于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:缺少关键字错误.

任何帮助,将不胜感激

Ale*_*sej 5

你正在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)