我有两个表Qut1
和Qut10
。
Qut1
包含引号项目的列表
Id LineNum Price
1 0 10
1 1 20
1 2 100
Qut10
包含应计小计的行
Id AfterLineNum
1 1
1 2
任何人都知道我如何创建脚本,该脚本将为我提供需要加在一起以获得小计的行号?
ie(1、1.1(即放在qut1第1行之后但第2行之前),30 (1、2.1、100)
答案 0 :(得分:0)
这里是将每个订单项映射到其相应小计的查询。它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。
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
| AfterLineNum | subtotal |
| ------------ | -------- |
| 1 | 30 |
| 2 | 100 |