Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Trả về hai bộ kết quả khi sử dụng WITH TempResults AS

Đ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).

  1. Thay vì CTE, hãy đẩy kết quả vào một bảng tạm thời, sau đó truy vấn từ đó.
  2. 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
  3. Thêm SELECT COUNT(*) vào kết quả chính được đặt dưới dạng cột bổ sung với CROSS 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ơ.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Thêm mệnh đề WHERE vào SQL động / lập trình

  2. Lỗi nghiêm trọng:Gọi đến hàm không xác định sqlsrv_connect () trong C:\ xampp \ htdocs

  3. Các vấn đề về giám sát hoạt động trong SQL Server 2005

  4. Không thể truyền đối tượng COM thuộc loại 'Hệ thống .__ ComObject' sang loại giao diện 'Microsoft.VisualStudio.OLE.Interop.IServiceProvider'

  5. Lấy nghịch đảo của phép nối?