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表示10件IT101物品在仓库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
我有一个 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表示10件IT101物品在仓库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