MS Access,基于条件的条件和

MS Access, Conditional Sum based on Criteria

我在 MS Access 中创建了一个查询,以按贷款汇总调整 # 如果它们是 AA 或 RA 类型。我需要帮助将其转换为 SQL,这将在访问中工作。

SELECT 
    RLI_ManualInterest.[Loan Account Number], 
    SUM(RLI_ManualInterest.[Loan Int Adjustment]) AS [SumOfLoan Int Adjustment],
    RLI_ManualInterest.[GLAcct Interest]
FROM 
    RLI_ManualInterest
WHERE
    (((RLI_ManualInterest.[Adjustment Type]) IN ("AA","RA")))
GROUP BY 
    RLI_ManualInterest.[Loan Account Number];

我需要创建两个字段,如果 Adjustment type 是 AA 或 RA,一个将包含 Int Adjustments 的总和,并且将被称为 [Loan Int Reaccr Adj Mtd],另一个将包含 Int Adjustments 的总和,如果调整类型为 FX、GL 或 FF。

如有任何帮助,我们将不胜感激

考虑以下使用 CASE WHEN 的条件求和表达式,大多数 RDMS 将其用于逻辑内联表达式。一个例外是 MS Access,其 ACE/JET SQL 方言不带有 CASE WHEN。但是使用 pass-through queries 你仍然可以 运行 MS Access GUI 程序中的其他本地 SQL 方言与后端数据库交互(SQL 服务器,MySQL,Postgre, DB2、甲骨文等)。 ) 通过 ODBC/OLEDB 个连接。

SELECT RLI_ManualInterest.[Loan Account Number],

       SUM(CASE WHEN RLI_ManualInterest.[Adjustment Type] IN ('AA', 'RA') 
                THEN RLI_ManualInterest.[Loan Int Adjustment]
                ELSE 0 
           END) AS [SumOfLoan Int Adjustment],

       SUM(CASE WHEN RLI_ManualInterest.[Adjustment Type] IN ('FX', 'GL', 'FF') 
                THEN RLI_ManualInterest.[Loan Int Adjustment]
                ELSE 0 
           END) AS [SumOfLoan Int Reaccr Adj Mtd]

FROM RLI_ManualInterest
GROUP BY RLI_ManualInterest.[Loan Account Number];

或者,在 MS Access 中等同于上述内容是使用从 SQL Server 2012 开始的逻辑 IIF() function (which is available。在这两个中,没有其他流行的 RDMS 使用 IIF():

SELECT RLI_ManualInterest.[Loan Account Number],

       SUM(IIF(RLI_ManualInterest.[Adjustment Type] IN ('AA', 'RA'), 
               RLI_ManualInterest.[Loan Int Adjustment],
               0)) AS [SumOfLoan Int Adjustment],

       SUM(IIF(RLI_ManualInterest.[Adjustment Type] IN ('FX', 'GL', 'FF'),
               RLI_ManualInterest.[Loan Int Adjustment],
               0)) AS [SumOfLoan Int Reaccr Adj Mtd]

FROM RLI_ManualInterest
GROUP BY RLI_ManualInterest.[Loan Account Number];