我一直在努力寻找这个问题的答案。这是我维护的代码,没有错误。它位于为报表返回数据的存储过程中。
为了便于阅读,我把它缩小了,只包括了基本部分。
它可以正常工作,但已请求将所有相关数据分组到相应的行中。
主要问题是将 GROUP BY 语句应用于包含 SUBQUERY 的第三个 CASE 语句:
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| |