【问题标题】:I need to make a subtotal field based off of two fields我需要根据两个字段创建一个小计字段
【发布时间】:2019-02-10 01:02:54
【问题描述】:

我有两张桌子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)

【问题讨论】:

    标签: sql sap


    【解决方案1】:

    这是一个将每个行项目映射到其相应小计的查询。它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      |
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-23
      • 2023-03-16
      • 2021-02-17
      • 2012-03-12
      相关资源
      最近更新 更多