SQL 将值的总和分组到范围内

SQL group into ranges the sum of values

我有一个 table,其中包含一些物品的库存信息。

AGENT_ID ITEM_ID WAREHOUSE_ID 数量 批量 年龄
100 IT101 1 10 B001 5
100 IT101 2 13 B002 8
100 IT101 1 15 B003 18
100 IT102 3 10 B005 42

年龄 列表示物品在仓库中的时间。我需要生成一个输出,其中包含物品在仓库中的老化情况。这些需要根据年龄汇总到范围内。下面是一个示例输出。

AGENT_ID ITEM_ID 仓库 R1(1-10) R2(11-20) R3(21<)
100 IT101 1 10 15 0
100 IT101 2 13 0 0
100 IT102 3 0 0 10

第二行的第一行table表示10IT101物品在仓库1中存放了一段时间(1-10) 天,15 件物品在仓库 1 中存放了 (11-20) 天,依此类推。

有没有一种方法可以根据代理、项目、仓库 ID 进行分组,并同时对项目数量求和,从而将其分组到范围内? 第一个 table 可能包含数百万条记录。尝试了一些内部查询,但它花费了很多时间。

您需要使用条件聚合:

select AGENT_ID, ITEM_ID, WAREHOUSE
      , sum(case when age between 1 and 10 then QTY end) "R1(1-10)"
      , sum(case when age between 11 and 20 then QTY end) "R2(11-20)"
      , sum(case when age > 20 then QTY end) "R3(21<)"
From table 
group by AGENT_ID, ITEM_ID, WAREHOUSE