あなたは(あなたが11gR2の以上にしていると仮定)recursive subquery factoringを使用することができます。
with r (supplier_number, order_weight, truck_number, truck_weight, remaining_weight) as (
select supplier_number, order_weight, 1,
least(order_weight, 24), order_weight - 24
from t
union all
select supplier_number, order_weight, truck_number + 1,
least(remaining_weight, 24), remaining_weight - 24
from r
where remaining_weight > 0
)
select supplier_number, order_weight, truck_number, truck_weight
from r
order by supplier_number, truck_number;
SUPPLIER_NUMBER ORDER_WEIGHT TRUCK_NUMBER TRUCK_WEIGHT
--------------- ------------ ------------ ------------
1 10 1 10
2 25 1 24
2 25 2 1
3 88 1 24
3 88 2 24
3 88 3 24
3 88 4 16
アンカー部材が元の重量、または24の場合を取得それはそれよりも高く、the least()
functionを使用しています - これはトラックナンバー1のものです。残っているものを取り除きます(これは問題ではないため、ここではマイナスの可能性があります)。再帰メンバは、ゼロよりも大きい場合は、前のレベルからの残りの計算を繰り返します。
は、あなただけのTON_WEIGHTを行い、計算を持っていないでしょうが、/24、それをテーブルの1列に格納しますか?なぜあなたは1台のトラックに24台と6台必要があるのかを知る必要があります。代わりに1.25台が保管され、この注文には1台と0.25台のトラックが必要です。すでに1台のトラックはフル24、0.25台のトラックは6台を意味するでしょうか? –
SELECT Tons/30 AS TrucksはTABLENAMEから必要です;これにより結果が得られます。この結果をテーブルに入れることもできます。テーブルにこの情報が必要な場合は、テーブルに列を追加する別の理由もあります。何度も何度もやりたいとは思わないが、この場合は単純な分割がうまくいく。 –
また、44.6のように1つの数字として、この注文は45台のトラックを必要とするため、これが読み取られます。 44が満員になり、次のトラックが6位になります。また、この数値を使用して44.6として合計費用を計算すると、1台のトラックにつき15ドルと言うことができます.44.6 * 15、別の簡単な計算とクエリ –