Điều này không thể được thực hiện (theo như tôi biết). Có ba cách giải quyết, một giải pháp cho phép bạn giữ dưới dạng hai tập kết quả riêng biệt và hai giải pháp còn lại yêu cầu hợp nhất các kết quả vào cùng một tập kết quả (dưới dạng một hàng bổ sung hoặc một cột bổ sung).
- Thay vì CTE, hãy đẩy kết quả vào một bảng tạm thời, sau đó truy vấn từ đó.
- Hợp nhất số lượng vào tập kết quả thực tế thành một hàng khác:sử dụng
UNION ALL
và cung cấp cho hàng đếm các giá trị phù hợp cho ID, Tên và RowID để bạn có thể trích xuất nó từ phần còn lại của dữ liệu - Thêm
SELECT COUNT(*)
vào kết quả chính được đặt dưới dạng cột bổ sung vớiCROSS JOIN
hoặc tương tự.
Đối với điều này sau này, bạn có thể thực hiện bằng cách thay đổi truy vấn chính của mình thành:
SELECT Id, Name, RowId, countTable.totalRows
FROM ResultsTemp
CROSS JOIN (SELECT COUNT(*) AS totalRows FROM ResultsTemp) AS countTable
GROUP BY Id, Name, RowId
HAVING RowId BETWEEN @StartRow and (@StartRow + @MaxRows);
Tôi không thể đảm bảo về hiệu suất - bạn cần phải lập hồ sơ.