我需要根据两个字段制作一个小计字段

时间:2019-02-10 01:02:54

标签: sql sap

我有两个表Qut1Qut10

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)

1 个答案:

答案 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

DB Fiddle

| AfterLineNum | subtotal |
| ------------ | -------- |
| 1            | 30       |
| 2            | 100      |