Вот запрос, который сопоставляет каждую позицию с соответствующей промежуточной суммой.Он JOIN
определяет обе таблицы и использует коррелированный подзапрос с условием NOT EXIST
, чтобы убедиться, что выбрана соответствующая запись промежуточного итога.
SELECT
t1.LineNum,
t1.Price,
t2.AfterLineNum
FROM
Qut1 t1
INNER JOIN Qut10 t2
ON t2.AfterLineNum >= t1.LineNum
AND NOT EXISTS (
SELECT 1
FROM Qut10
WHERE AfterLineNum >= LineNum AND AfterLineNum < t2.AfterLineNum
)
ORDER BY
t2.AfterLineNum ,
t1.LineNum
Вы не пометили свою RDBMS, но это стандартный SQL, которыйдолжен работать на большинстве платформ.
Эта демонстрация DB Fiddle с вашими образцами данных дает:
| LineNum | Price | AfterLineNum |
| ------- | ----- | ------------ |
| 0 | 10 | 1 |
| 1 | 20 | 1 |
| 2 | 100 | 2 |
Если вы ищетедля фактического вычисления промежуточных итогов вы можете просто включить агрегацию :
SELECT
t2.AfterLineNum,
SUM(t1.Price) subtotal
FROM
Qut1 t1
INNER JOIN Qut10 t2
ON t2.AfterLineNum >= t1.LineNum
AND NOT EXISTS (
SELECT 1
FROM Qut10
WHERE AfterLineNum >= LineNum AND AfterLineNum < t2.AfterLineNum
)
GROUP BY t2.AfterLineNum
ORDER BY t2.AfterLineNum
DB Fiddle :
| AfterLineNum | subtotal |
| ------------ | -------- |
| 1 | 30 |
| 2 | 100 |