将 3 个外部应用合并为 1



我有一个选择查询,其中我使用 3 个 OUTER APPLY 语句,一个是同一个表,第一个条件对所有条件都是相同的,其余的都不同。 我用它来获取同一字段的总和。有什么方法可以将所有这些 3 合并为 1 吗?

以下是我到目前为止所做的:

OUTER APPLY
        (
            SELECT
                PaymentAmount = SUM(PaymentAmount)
                FROM PMT
                    WHERE InvoiceId = INV.InvoiceId
                    GROUP BY InvoiceId
        )P2
        OUTER APPLY
        (
            SELECT
                PaymentAmount = SUM(PaymentAmount)
                FROM PMT
                    WHERE InvoiceId = INV.InvoiceId
                        AND PaymentBatchID <= PB.PaymentBatchID
                        GROUP BY InvoiceId
        )P3
        OUTER APPLY
        (
            SELECT
                PaymentAmount = SUM(PaymentAmount)
                FROM PMT
                    WHERE InvoiceId = INV.InvoiceId
                        AND PaymentBatchID <= PB.PaymentBatchID
                        AND PaymentID <= Pay.PaymentID
                        GROUP BY InvoiceId
        )P4

表 PMT 包含以下列

InvoiceId - INT
PaymentId - INT
PaymentBatchId - INT
PaymentAmount - DECIMAL(10,2)

我尝试在相同的外部应用程序中使用大小写,但出现以下错误

Msg 8124,级别 16,状态 1,第 134 行

指定了多个列在包含外部引用的聚合表达式中。

如果要聚合的表达式包含外部引用,则外部引用必须是表达式中引用的唯一列。

用例...何时为条件

OUTER APPLY
(
        SELECT
               P2_PaymentAmount = SUM(x.PaymentAmount),
               P3_PaymentAmount = SUM(CASE WHEN x.PaymentBatchID <= PB.PaymentBatchID THEN x.PaymentAmount END),
               P4_PaymentAmount = SUM(CASE WHEN x.PaymentBatchID <= PB.PaymentBatchID
                                            AND x.PaymentID <= Pay.PaymentID THEN x.PaymentAmount END)
        FROM   
               PMT x
        WHERE  
               x.InvoiceId = INV.InvoiceId
) P234

最新更新