如何在 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>
我不知道你要在这里做什么,但上面至少应该为你指明正确的方向(以及人们发表的评论)。
我正在尝试 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>
我不知道你要在这里做什么,但上面至少应该为你指明正确的方向(以及人们发表的评论)。