Função de agregação Oracle para alocar quantidade
Suponha que eu tenha 2 tabelasT1
eT2
do seguinte modo
T1
:
bag_id bag_type capacity
------|--------|--------
1 A 500
2 A 300
3 A 100
4 B 200
5 B 100
T2
:
item_type item_amount
---------|-----------
A 850
B 300
Cada registro na tabelaT1
representa uma sacola e sua capacidade, aqui tenho 5 sacolas. Eu quero escrever um SQL que aloque itens na tabelaT2
em cada bolsa do mesmo tipo, ou seja, o resultado deve ser assim
bag_id bag_type capacity allocated_amount
------|--------|--------|----------------
1 A 500 500
2 A 300 300
3 A 100 50
4 B 200 200
5 B 100 100
Portanto,Estou encontrando algum tipo de função de agregação, vamos chamá-loallocate()
, que pode produzir a colunaallocated_amount
como acima. Eu acho que, se existir, pode ser usado assim
select
t1.bag_id,
t1.bag_type,
t1.capacity,
allocate(t2.item_amount, t1.capacity)
over (partition by t1.bag_type order by t1.capacity desc) as allocatd_amount
from t1, t2
where t2.item_type = t1.bag_type
Minha solução atual é usar uma tabela temporária e um loop PL / SQL para o cálculo, mas espero poder fazê-lo com um simples SQL.