2

以下のようなテーブルが 2 つあります。

ItemTable
-----------------------------
ItemId | NumberPurchased
1      | 10
2      | 90

以下の表に基づいて、注文の合計費用を計算する必要があります。この表には、注文数に応じてアイテムごとの価格が変動します。

PriceBands
-----------------------------
ScaleId | LowerLimit | UpperLimit | CostPerItem
1       | 1          | 5          | 10
2       | 6          | 10         | 9
3       | 11         | 20         | 8
...

どうにかして総コストを計算し、それを最初のテーブル (項目) に結合する必要があります。

誰でも助けてもらえますか?

ItemId 1 を明確にするために、計算は次のようになります。

NumberPurchased = 10
(5 * 10) + (5 * 9)  = 95

バンディング バンディングは、上限を超えるアイテムにのみ影響します。

4

2 に答える 2

4

すべてのアイテムの価格が同じ場合は、次のような方法でうまくいく可能性があります。

SELECT i.itemID, i.NumberPurchased, i.NumberPurchased * p.costPerItem as "Cost"
FROM itemTable i, PriceBands p
WHERE i.NumberPurchased >= p.LowerLimit 
      AND i.NumberPurchased <= p.UpperLimit;

sqlfiddle demo

アイテムに異なる価格が必要な場合は、itemId を priceBands 内に配置し、その itemId で 2 つのテーブルを結合する必要があります。


購入した数の各層の増分コストを処理するには、次のことができます。

SELECT i.itemID, i.NumberPurchased, SUM((
      CASE 
        WHEN i.NumberPurchased > p.upperLimit
          THEN p.upperLimit
        ELSE i.NumberPurchased - p.LowerLimit + 1
        END
      ) * p.costPerItem) AS "Cost"
FROM itemTable i, PriceBands p
WHERE i.NumberPurchased > p.LowerLimit
GROUP BY 1, 2

これは、PriceBands テーブルのすべての行を通過しますi.NumberPurchased > p.LowerLimit

  • whileで乗算p.costPerItemします。(5 * 10);p.upperLimiti.NumberPurchased > p.upperLimit
  • p.costPerItemi.NumberPurchased - p.lowerLimit + 1. (9 * 10-6 + 1 . This+ 1 is to include thelowerLimit` 番号も乗算します)。

sqlfiddle demo

于 2013-10-19T21:32:19.537 に答える
1

PriceBands テーブルに外部キーがあった場合、クエリは次のように返します。

select it.itemId, pb.costPerItem
from ItemTable it, 
     PriceBands pb
where it.itemId = pb.itemId
and it.numberPurchased >= pb.LowerLimit
and it.numberPurchased <= pb.upperLimit;
于 2013-10-19T21:36:58.737 に答える