Я собираюсь предположить, что вы имели в виду Item 68 в ItemQty и что вы добавляете количество за каждый месяц, пока не достигнете этого магического числа. Затем вы ищете, за какой месяц было достигнуто целевое количество. У меня нет запущенного сервера sql, но sql должен быть довольно близко.
Это утверждение предполагает, что вы действительно имеете в виду совпадение итогов:
SELECT x.RowNo, x.Period, x.ItemID
FROM ( SELECT RowNo, Period, ItemID
,SUM(RcptQty) OVER(PARTITION BY ItemId ORDER BY ItemId, period) AS running_total
FROM ItemTran t
) x
,ItemQty q
WHERE q.Qty = x.running_total
AND q.ItemID = x.ItemID
Этот оператор возвращает последний месяц перед достижением порога:
SELECT x.ItemID, MAX(x.Period)
FROM ( SELECT RowNo, Period, ItemID
,SUM(RcptQty) OVER(PARTITION BY ItemId ORDER BY ItemId, period) AS running_total
FROM ItemTran t
) x
,ItemQty q
WHERE q.Qty <= x.running_total
AND q.ItemID = x.ItemID
GROUP BY x.ItemID
Если кто-то еще хочет поиграть с этим, вот сценарии создания, которые я использовал:
CREATE TABLE ItemTran(RowNo int, ItemID varchar(16), Period date, RcptQty int);
INSERT INTO ItemTran VALUES(1, 'ITEM-A', '2011-01-01', 15);
INSERT INTO ItemTran VALUES(2, 'ITEM-A', '2011-02-01', 10);
INSERT INTO ItemTran VALUES(3, 'ITEM-A', '2011-03-01', 18);
INSERT INTO ItemTran VALUES(4, 'ITEM-A', '2011-04-01', 25);
INSERT INTO ItemTran VALUES(5, 'ITEM-A', '2011-05-01', 3);
INSERT INTO ItemTran VALUES(6, 'ITEM-A', '2011-06-01', 12);
INSERT INTO ItemTran VALUES(7, 'ITEM-A', '2011-07-01', 15);
INSERT INTO ItemTran VALUES(8, 'ITEM-A', '2011-08-01', 5);
INSERT INTO ItemTran VALUES(9, 'ITEM-A', '2011-09-01', 15);
INSERT INTO ItemTran VALUES(10, 'ITEM-A', '2011-10-01', 8);
INSERT INTO ItemTran VALUES(11, 'ITEM-A', '2011-11-01', 10);
INSERT INTO ItemTran VALUES(12, 'ITEM-A', '2011-12-01', 5);
CREATE TABLE ItemQty(ItemID varchar(16), Qty int);
INSERT INTO ItemQty VALUES('ITEM-A', 68);