【问题标题】:SQL Use result of two SUM queries to one querySQL 将两个 SUM 查询的结果用于一个查询
【发布时间】:2019-12-13 12:41:11
【问题描述】:

也许这是一个简单的问题,但我不知道该怎么做。 我有 2 个 SQL 查询,两者几乎相同,仅在 WHERE 子句中有所不同。 每个查询返回 1 个 SUM 数字。 我需要从两个查询中获取结果,并使用它来创建一个名为“RESULT”的列,其中将计算查询的结果。

1 个查询:

SELECT SUM(a.ACC_NOMINAL_AMOUNT) AS RESULT
        FROM ACCOUNTS a 
        INNER JOIN PARTIES p
        ON a.PT_KEY = p.PT_KEY
        INNER JOIN ACCOUNT_COLLATERALS c
        ON c.ACC_KEY = a.ACC_KEY
        INNER JOIN COLLATERALS co
        on c.COLT_KEY = co.COLT_KEY
        INNER JOIN COLLATERAL_PORTFOLIOS por
        ON co.COLTPTF_KEY = por.COLTPTF_KEY
        WHERE co.COLTPTF_KEY = '261' AND 
        co.COLT_DELETED_FLAG = 'N' AND 
        a.ACC_CLOSE_FLAG = 'N' 
        AND  co.COLT_SHORTENING_COEFFICIENT = 82

2 查询:

SELECT SUM(a.ACC_NOMINAL_AMOUNT) AS RESULT
        FROM ACCOUNTS a 
        INNER JOIN PARTIES p
        ON a.PT_KEY = p.PT_KEY
        INNER JOIN ACCOUNT_COLLATERALS c
        ON c.ACC_KEY = a.ACC_KEY
        INNER JOIN COLLATERALS co
        on c.COLT_KEY = co.COLT_KEY
        INNER JOIN COLLATERAL_PORTFOLIOS por
        ON co.COLTPTF_KEY = por.COLTPTF_KEY
        WHERE co.COLTPTF_KEY = '261' AND 
        co.COLT_DELETED_FLAG = 'Y' AND 
        a.ACC_CLOSE_FLAG = 'Y' 
        AND  co.COLT_SHORTENING_COEFFICIENT = 82

假设第一个查询返回 SUM 值 10,第二个查询返回 5。 所以我需要有一个查询,它将返回列 RESULT 15。

也许有一些更有效的方法来编写这个查询,因为它只是在两个参数的 WHERE 子句中有所不同。

感谢您的帮助

【问题讨论】:

    标签: sql oracle group-by


    【解决方案1】:

    这应该可以完成工作:

    SELECT SUM(a.ACC_NOMINAL_AMOUNT) AS RESULT
    FROM ACCOUNTS a 
    INNER JOIN PARTIES p ON a.PT_KEY = p.PT_KEY
    INNER JOIN ACCOUNT_COLLATERALS c ON c.ACC_KEY = a.ACC_KEY
    INNER JOIN COLLATERALS co ON c.COLT_KEY = co.COLT_KEY
    INNER JOIN COLLATERAL_PORTFOLIOS por ON co.COLTPTF_KEY = por.COLTPTF_KEY
    WHERE 
        co.COLTPTF_KEY = '261' 
        AND (a.ACC_CLOSE_FLAG, co.COLT_DELETED_FLAG) IN ( ('Y', 'Y'), ('N', 'N') )
        AND  co.COLT_SHORTENING_COEFFICIENT = 82
    

    您可以使用条件聚合一次获得 3 个结果:

    SELECT 
        SUM(CASE WHEN a.ACC_CLOSE_FLAG = 'N' AND co.COLT_DELETED_FLAG = 'N' 
            THEN a.ACC_NOMINAL_AMOUNT END) AS RESULT_N,
        SUM(CASE WHEN a.ACC_CLOSE_FLAG = 'Y' AND co.COLT_DELETED_FLAG = 'Y' 
            THEN a.ACC_NOMINAL_AMOUNT END) AS RESULT_Y,
        SUM(a.ACC_NOMINAL_AMOUNT) AS RESULT
    FROM ACCOUNTS a 
    INNER JOIN PARTIES p ON a.PT_KEY = p.PT_KEY
    INNER JOIN ACCOUNT_COLLATERALS c ON c.ACC_KEY = a.ACC_KEY
    INNER JOIN COLLATERALS co ON c.COLT_KEY = co.COLT_KEY
    INNER JOIN COLLATERAL_PORTFOLIOS por ON co.COLTPTF_KEY = por.COLTPTF_KEY
    WHERE 
        co.COLTPTF_KEY = '261' 
        AND (a.ACC_CLOSE_FLAG, co.COLT_DELETED_FLAG) IN ( ('Y', 'Y'), ('N', 'N') )
        AND  co.COLT_SHORTENING_COEFFICIENT = 82
    

    【讨论】:

      【解决方案2】:

      您可以轻松组合条件:

      SELECT SUM(a.ACC_NOMINAL_AMOUNT)
      FROM . . .
      WHERE co.COLTPTF_KEY = '261' AND 
            co.COLT_SHORTENING_COEFFICIENT = 82 AND
            (co.COLT_DELETED_FLAG, a.ACC_CLOSE_FLAG) IN ( ('N', 'N'), ('Y', 'Y') )
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-01-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多