常见的问题,我知道。只是还没能找到解决我问题的办法,所以打我的免职和/或反对票,如果你必须的话。
(甲骨文12c)
我有这样的数据:
Date ITEM QTY
01-MAR-20 STS 6920
01-MAR-20 STS 2581
01-MAR-20 S01 22606
01-MAR-20 S01 22312
01-MAR-20 S01 56000
....
我希望在日期和项目级别获取要聚合的数量(总和),每个日期的每个唯一项目只有一条记录,因此如下所示:
Date ITEM QTY
01-MAR-20 STS 9501
01-MAR-20 S01 100918
我尝试使用的查询是:
SELECT
WO.DATE,
D.ITEM,
SUM(WO.QUANTITY) OVER (PARTITION BY WO.DATE, D.ITEM) AS QTY
FROM SCHEMA_1.WO,
SCHEMA_2.D
WHERE WO.ITEM_DIM_KEY = D.ITEM_DIM_KEY AND
(DATE > '01 MAR 2020' AND DATE < '01 JUL 2020')
ORDER BY WO.COMPLETED_DATE;
3条答案
按热度按时间dwbf0jvd1#
一
date
oracle中的数据类型可以有时间组件。所以你要小心。除非你知道你没有时间成分,trunc()
更安全。此外,您还可以使用date
处理日期常量的关键字:select笔记:
你不需要解析函数。聚合应足够。
使用适当的、明确的、标准的、可读的
JOIN
语法。我假设在
ORDER BY
是结果集中的第一列。mqkwyuun2#
你只需要一个基本的
GROUP BY
查询:使用
SUM
如果希望保留联接结果集中的每条记录,那么作为窗口函数是有意义的。但是,在您的情况下,您需要报告每个日期/项目组的合计金额。使用GROUP BY
这就是你想要的。n7taea2i3#
我想你只需要一个简单的聚合:
顺便说一下,我升级了
JOIN
并将日期文字改为iso日期,而不是VARCHAR
s。