我需要根据两个字段制作一个小计字段
I need to make a subtotal field based off of two fields
我有两个表 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)
这是一个将每个行项目映射到其相应小计的查询。它 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 |
我有两个表 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)
这是一个将每个行项目映射到其相应小计的查询。它 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 |