Supponiamo Ho 2 tabelle T1
e T2
come seguefunzione di aggregazione Oracle per ripartire il valore
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
Ogni record nella tabella T1
rappresenta un sacchetto e la sua capacità, qui ho 5 borse. Voglio scrivere uno SQL che allocare elementi nella tabella T2
in ogni sacchetto con lo stesso tipo, vale a dire il risultato dovrebbe essere simile a questo
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
Pertanto, mi sto trovando una sorta di funzione di aggregazione, chiamiamolo allocate()
, che può produrre la colonna allocated_amount
come sopra. Ho una supposizione che, se esiste, potrebbe essere utilizzato come questo
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
mia soluzione attuale è quella di utilizzare una tabella temporanea e PL loop/SQL per il calcolo, ma spero di poter farlo con un semplice SQL.
è ordine della dotazione rilevante? Nei tuoi dati di esempio si giunge a allocare sulla capacità DESC, nella funzione di aggregazione ordinata sulla capacità ASC. Oppure il tuo evento cerca un'allocazione ottimale? –
Sì, mi aspettavo che l'ordine fosse 'DESC'. Correggerò il post – asinkxcoswt