首页 > 解决方案 > SQL将值的总和分组为范围

问题描述

我有一张表,其中包含某些物品的库存信息。

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

第二个表的第一行表示IT101有10件物品在仓库 1 中存放了 (1-10) 天,15 件商品在仓库 1 中存放了 (11-20) 天,以此类推。

有没有办法从代理、项目、仓库 id 分组并同时将项目数量汇总到范围中?第一个表可能包含数百万条记录。尝试了一些内部查询,但这需要很多时间。

标签: sqloracle11g

解决方案


您需要使用条件聚合:

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

推荐阅读