SQL - Вычитание истощающего значения из строк

У меня есть ситуация, когда мне нужно взять "потребленное количество" из одной таблицы и применить его ко второй таблице, в которой есть 1 или более строк, которые являются "объединенными партиями" количеств. Я не уверен, как описать это лучше, вот что я имею в виду с точки зрения таблицы:

Table Pooled_Lots
----------------------------
Id  Pool    Lot Quantity
1   1       1   5
2   1       2   10
3   1       3   4
4   2       1   7
5   3       1   1
6   3       2   5

Table Pool_Consumption
----------------------------
Id  PoolId  QuantityConsumed
1   1       17
2   2       8
3   3       10

Мне нужен результирующий набор строк из SQL запроса, который выглядел бы так:

Pool    Lot Quantity    QuantityConsumed    RunningQuantity RemainingDemand SurplusOrDeficit
1       1   5           17                  0               12              NULL
1       2   10          17                  0               2               NULL
1       3   4           17                  2               0               2
2       1   7           8                   0               1               -1
3       1   1           10                  0               9               NULL
3       2   5           10                  0               4               -4

Итак, Pool_Consumption.QuantityConsumed должно быть "истощающим значением", вычитаемым из строк Pooled_Lots, где Pool_Consumption.PoolId = Pooled_Lots.Pool. Я не могу понять, как вы сформулируете запрос, который говорит:

  • Если не в последней строке, AmtConsumedFromLot = Quantity - QuantityConsumed if QuantityConsumed < Quantity, else Quantity
  • Если больше строк, QuantityConsumed = QuantityConsumed - Quantity
  • Loop until last row
  • If last row, AmtConsumedFromLot = QuantityConsumed

Предположим, что Id - первичный ключ, и целевая БД - SQL 2005.

Edit: Поскольку люди заявляют, что я "не даю достаточно информации, пожалуйста, закройте эту тему" Вот еще: Существует НЕ установленный лот, из которого берется Pool_Consumption, он должен брать из всех лотов, где Pool_Consumption.PoolId = Pooled_Lots.Pool, пока QuantityConsumed не будет либо полностью исчерпан, либо я вычитаю из последнего подмножества строк Pooled_Lots, где Pool_Consumption.PoolId = Pooled_Lots.Pool

Я не знаю, как еще это объяснить. Это не вопрос домашнего задания, это не выдуманное "упражнение для размышления". Мне нужна помощь в попытке понять, как правильно вычесть QuantityConsumed из нескольких строк!

6
задан Irinotecan 23 February 2012 в 21:02
поделиться