这是一个将每个行项目映射到其相应小计的查询。它JOINs 两个表并使用具有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,应该适用于大多数平台。
This DB Fiddle demo 与您的样本数据产生:
| 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 |