如何在 Oracle SQL 中使用带有 CASE 语句的 WINDOW 函数

How to use a WINDOW function with a CASE statement in Oracle SQL

我正在尝试 SUM 在 ORACLE SQL 中使用 CASE 分组数量,但这似乎不起作用:

SUM(A11.NEW_MRP_QTY) OVER (CASE WHEN A11.STOCK_TYPE = 'C' THEN 'INVENTORY'
         WHEN A11.STOCK_TYPE = 'L' THEN 'INTRANSIT PO'
         WHEN A11.STOCK_TYPE = 'B' THEN 'PO AT FACTORY'
         WHEN (A11.STOCK_TYPE = 'A' AND A11.POR_ORDER_TYPE = 'CO') THEN 'PO AT FACTORY'
         WHEN (A11.STOCK_TYPE = 'A' AND A11.POR_ORDER_TYPE <> 'CO') THEN 'NOT BOUGHT'
         WHEN A11.STOCK_TYPE = ' ' THEN 'BLANK STOCK TYPE'
         ELSE 'CHECK')
    END AS 'SUPPLY_QTY'

对我做错了什么有什么想法吗?谢谢。

这就是您现在拥有的(稍微简化并应用于 Scott 的示例 emp table,因为我没有您的 table(s),您也没有发布任何示例数据):

SQL> select sum(sal) over (case when deptno = 10 then 'A'
  2                             when deptno = 20 then 'B'
  3                             else 'C'
  4                        end) as supply_qty
  5  from emp;
select sum(sal) over (case when deptno = 10 then 'A'
                      *
ERROR at line 1:
ORA-00907: missing right parenthesis


SQL>

为什么会出错?因为over部分函数是错误的。它不能只有那个 case 表达式,你缺少 partition by and/or order by (参见第 1 行),例如

SQL> select sum(sal) over (partition by case when deptno = 10 then 'A'
  2                                          when deptno = 20 then 'B'
  3                                          else 'C'
  4                                     end) as supply_qty
  5  from emp;

SUPPLY_QTY
----------
      8750
      8750
      8750
     10875
     10875
     10875
     10875
     10875
      9400
      9400
      9400
      9400
      9400
      9400

14 rows selected.

SQL>

我不知道你要在这里做什么,但上面至少应该为你指明正确的方向(以及人们发表的评论)。