Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 无ID关系的分层数据类型的总和和计数_Sql_Oracle12c_Hierarchical - Fatal编程技术网

Sql 无ID关系的分层数据类型的总和和计数

Sql 无ID关系的分层数据类型的总和和计数,sql,oracle12c,hierarchical,Sql,Oracle12c,Hierarchical,我有一个表,上面有项目、年/月格式的日期以及特定月份和年份的每项销售金额 有很多项目,但其中一些项目之间也有关系。 具有关系的项目具有相同的3个字符 示例:101是基本版本中的项目1,随后市场上出现了新版本101AA和之后仍在市场上的101AB=yearmonth 202102。 项目并不总是需要基本版本(仅3个字符),但它可以以最高版本=项目200A开始。后来出现了新版本200AC和更高版本200DD,正如您所见,到目前为止,市场上可能同时有两个版本 我需要的是显示特定项目的第一个版本,在市场

我有一个表,上面有项目、年/月格式的日期以及特定月份和年份的每项销售金额

有很多项目,但其中一些项目之间也有关系。 具有关系的项目具有相同的3个字符 示例:101是基本版本中的项目1,随后市场上出现了新版本101AA和之后仍在市场上的101AB=yearmonth 202102。 项目并不总是需要基本版本(仅3个字符),但它可以以最高版本=项目200A开始。后来出现了新版本200AC和更高版本200DD,正如您所见,到目前为止,市场上可能同时有两个版本

我需要的是显示特定项目的第一个版本,在市场上花费的总月数(所有版本加在一起)以及仅在市场上仍然存在的项目的总金额(所有版本加在一起)。这类似于分层查询,部门经理在顶部,员工+他们的所有工资。 最后一件400AA于2020年12月售罄,因此不符合条件

所需的输出应如下所示

Item       months      total
101         26          260
200A        11          175




create table items (
yearmonth varchar2(6),
item_code varchar2(12),
amount number        );

insert into items values ( '201901' , '101' , 10 );
insert into items values ( '201902' , '101' , 10 );
insert into items values ( '201903' , '101' , 10 );
insert into items values ( '201904' , '101' , 10 );
insert into items values ( '201905' , '101' , 10 );
insert into items values ( '201906' , '101' , 10 );
insert into items values ( '201907' , '101' , 10 );
insert into items values ( '201908' , '101' , 10 );
insert into items values ( '201909' , '101' , 10 );
insert into items values ( '201910' , '101' , 10 );
insert into items values ( '201911' , '101' , 10 );
insert into items values ( '201912' , '101' , 10 );
insert into items values ( '202001' , '101' , 10 );
insert into items values ( '202002' , '101' , 10 );
insert into items values ( '202003' , '101' , 10 );
insert into items values ( '202004' , '101AA' , 10 );
insert into items values ( '202005' , '101AA' , 10 );
insert into items values ( '202006' , '101AA' , 10 );
insert into items values ( '202007' , '101AA' , 10 );
insert into items values ( '202008' , '101AA' , 10 );
insert into items values ( '202009' , '101AA' , 10 );
insert into items values ( '202010' , '101AA' , 10 );
insert into items values ( '202011' , '101AB' , 10 );
insert into items values ( '202012' , '101AB' , 10 );
insert into items values ( '202101' , '101AB' , 10 );
insert into items values ( '202102' , '101AB' , 10 );
insert into items values ( '202004' , '200A' , 5 );
insert into items values ( '202005' , '200A' , 5 );
insert into items values ( '202006' , '200A' , 5 );
insert into items values ( '202007' , '200A' , 5 );
insert into items values ( '202008' , '200AC' , 10 );
insert into items values ( '202009' , '200AC' , 10 );
insert into items values ( '202010' , '200AC' , 10 );
insert into items values ( '202011' , '200AC' , 10 );
insert into items values ( '202011' , '200DD' , 10 );
insert into items values ( '202012' , '200AC' , 10 );
insert into items values ( '202012' , '200DD' , 25 );
insert into items values ( '202101' , '200AC' , 10 );
insert into items values ( '202101' , '200DD' , 25 );
insert into items values ( '202102' , '200AC' , 10 );
insert into items values ( '202102' , '200DD' , 25 );
insert into items values ( '202011' , '400' , 50 );
insert into items values ( '202011' , '400AA' , 10 );
insert into items values ( '202012' , '400AA' , 50 );
insert into items values ( '202012' , '400AA' , 25 );

基于以上数据,不需要使用层次查询,可以使用以下sql:

select ITEM_CODE_First,count(distinct YEARMONTH), sum(amount) total from(
select YEARMONTH,max(YEARMONTH)over (partition by substr(item_code,1,3)) as YEARMONTH_LAST,
ITEM_CODE, min(ITEM_CODE) over (partition by substr(item_code,1,3)) as ITEM_CODE_First,amount from items)
where YEARMONTH_LAST = 202102
group by ITEM_CODE_First;