私はこれに対する答えを見つけるために戦ってきました。これは私が管理しているコードであり、エラーはありません。レポートのデータを返すストアド プロシージャ内にあります。
読みやすくするために小さくし、重要な部分だけを含めました。
エラーは発生しませんが、関連するすべてのデータをそれぞれの行にグループ化するように要求されています。
主な問題は、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| |