Oracle SQL格式化
我有一个查询来获取账单数据,按日历年和一年中的星期分组。我想了解一下账单的总体演变。因此,不仅是1周的账单数量,而且从开始到本周。我有以下疑问Oracle SQL格式化,oracle,Oracle,我有一个查询来获取账单数据,按日历年和一年中的星期分组。我想了解一下账单的总体演变。因此,不仅是1周的账单数量,而且从开始到本周。我有以下疑问 SELECT DD.CAL_YEAR, DD.WEEK_OF_YEAR AS "Date by week", SUM(DISTINCT FAB.ID) OVER ( ORDER BY DD.CAL_YEAR, DD.WEEK_OF_YEAR ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) AS "Nu
SELECT DD.CAL_YEAR, DD.WEEK_OF_YEAR AS "Date by week", SUM(DISTINCT FAB.ID) OVER ( ORDER BY DD.CAL_YEAR, DD.WEEK_OF_YEAR ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) AS "Number of bills"
FROM BILLS_TABLE FAB
JOIN DIM_DATE DD ON FAB.BALANCE_DATE_ID = DD.ID
GROUP BY DD.CAL_YEAR,DD.WEEK_OF_YEAR;
但当我执行此查询时,会出现以下异常:
错误:ORA-30487:此处不允许按订单
SQLState:99999错误代码:30487
OVER函数需要order by子句,那么有什么问题吗?问题实际上是
distinct
在sum
中的使用
因为您有order by子句,这意味着您在做一个累积和。在这种情况下执行不同的,实际上没有任何意义。这就是错误实际上想要告诉你的
项目的文件中提到了这一点:
如果指定DISTINCT
,则只能指定分析子句的查询分区子句
。不允许使用order\u by\u子句
和windowing\u子句
好的,当我删除distinct时,我得到了另一个错误:ORA-00979:不是GROUP BY表达式分析函数的工作方式与普通聚合函数的工作方式不同。分析函数只能引用group by
子句中的列。