0

私はこれに対する答えを見つけるために戦ってきました。これは私が管理しているコードであり、エラーはありません。レポートのデータを返すストアド プロシージャ内にあります。

読みやすくするために小さくし、重要な部分だけを含めました。

エラーは発生しませんが、関連するすべてのデータをそれぞれの行にグループ化するように要求されています。

主な問題は、SUBQUERY を含む 3 番目の CASE ステートメントに GROUP BY ステートメントを適用することです。

    SELECT
            CompanyName,
            CompanyRef,
            Amount,
            Reference,
            VendorNo,
            CASE ErrorID WHEN 10 'Company Name: ' + CompanyName + 'CompanyRef' END AS InvalidCompanyNameForRef,
            CASE ErrorID WHEN 11 'Vendor Number:' + VendorNo END AS InvalidVendorNo,
            CASE ErrorID WHEN 12 (SELECT TOP(1) 'Non VAT Amount:' + CAST(PendingPayments.NonVatAmount AS varchar) + 'Import Amount:' + CAST(Imported.PaymentAmount) FROM PendingPayments
                        WHERE  Imported.CompanyRef = PendingPayments.CompanyRef
                           AND Imported.VendorNo = PendingPayments.VendorNo
                               AND ISNUMERIC(Imported.PaymentAmount) = 1
                           AND CAST(Imported.PaymentAmount AS MONEY) <> PendingPayments.NonVatAmount AND PendingPayments.isVAT = 0      
                         ) END As PaymentAmountMismatch
        .
        .
        .
GROUP BY
            CompanyName,
            CompanyRef,
            Amount,
            Reference,
            VendorNo,
            CASE ErrorID WHEN 10 'Company Name: ' + CompanyName + 'CompanyRef' END,
            CASE ErrorID WHEN 11 'Vendor Number:' + VendorNo END

SUBQUERY から派生したフィールドでグループ化するにはどうすればよいですか。

同じデータの異なる列に対して異なる行を返す代わりに、次のようなものを返したいと思います:

CompanyName | CompanyRef | Amount | Reference | VendorNo | InvalidCompanyNameForRef     | Invalid Vendor Number | PaymentAmountMismatch
------------+------------+--------+-----------+----------+------------------------------+-----------------------+-----------------------------------------+
ABC         | 1          | 25.00  | INV001    |390       |Company Name: ABC CompanyRef:1|                       |   
DEF         | 5          | 12.00  | INV002    |212       |                              |                   212 |Expected Amount:12.50, Import Amount:12.00
HIJ         | 7          | 9.50   | INV003    |31        |Company Name: HIJ CompanyRef:7|                       |
4

1 に答える 1

1

私には、CTEがあなたを助けることができるようです. コードはテストされていませんが、アイデアを得るには十分だと思います。

    WITH cte 
           (CompanyName,
            CompanyRef,
            Amount,
            Reference,
            VendorNo,
            InvalidCompanyNameForRef,
            InvalidVendorNo,
            PaymentAmountMismatch) AS
(
SELECT
CompanyName,
CompanyRef,
Amount,
Reference,
VendorNo,
CASE ErrorID WHEN 10 'Company Name: ' + CompanyName + 'CompanyRef' END AS InvalidCompanyNameForRef,
CASE ErrorID WHEN 11 'Vendor Number:' + VendorNo END AS InvalidVendorNo,
CASE ErrorID WHEN 12 (SELECT TOP(1) 'Non VAT Amount:' + CAST(PendingPayments.NonVatAmount AS varchar) + 'Import Amount:' + CAST(Imported.PaymentAmount) FROM PendingPayments
            WHERE  Imported.CompanyRef = PendingPayments.CompanyRef
                AND Imported.VendorNo = PendingPayments.VendorNo
                    AND ISNUMERIC(Imported.PaymentAmount) = 1
                AND CAST(Imported.PaymentAmount AS MONEY) <> PendingPayments.NonVatAmount AND PendingPayments.isVAT = 0      
                ) END As PaymentAmountMismatch
)
SELECT * FROM cte 
GROUP BY
    CompanyName,
    CompanyRef,
    Amount,
    Reference,
    VendorNo,
    InvalidCompanyNameForRef,
    InvalidVendorNo,
    PaymentAmountMismatch
于 2013-07-04T11:33:08.410 に答える