Załóżmy, że mam 2 tabele T1
i T2
następującoOracle funkcja agregacja przeznaczyć kwotę
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
Każdy rekord w tabeli T1
reprezentuje torbę i jego pojemność, tutaj mam 5 torebek. Chcę napisać SQL, które przeznaczyć przedmioty na stole T2
do każdej torby z tego samego rodzaju, tj wynik powinien być jak ten
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
Dlatego jestem znalezienie jakiegoś funkcji agregacji, nazwijmy to allocate()
, który może wytworzyć kolumnę allocated_amount
jak wyżej. mam przypuszczenie, że jeśli istnieje, to może być używane jak to
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
Mój obecny rozwiązaniem jest użycie temp tabeli i PL/pętli SQL do obliczenia, ale mam nadzieję, że mogę to zrobić za pomocą jednej prostej SQL.
jest kolejność przydziału odpowiedniego? W twoich przykładowych danych szwy przydzielasz na pojemność DESC, w funkcji agregacji, którą zamawiasz na ASC. A może szukacie optymalnej alokacji? –
Tak, oczekiwałem, że zamówienie będzie "DESC". Poprawię wpis. – asinkxcoswt