2011-10-05 18 views
11

Tôi đang viết một trang web để lọc các kết quả tương tác dựa trên các tiêu chí lọc vì nó được người dùng chỉ định. Tôi chỉ muốn trở về từ SQL 20 hàng đầu nhưng tôi muốn biết có bao nhiêu hàng đáp ứng được các tiêu chí (Count). Tôi muốn có thể cho người dùng biết: "đây là 20 hàng hàng đầu phù hợp với tiêu chí của bạn và BTW, có 2.000 hàng bổ sung mà tôi không hiển thị ở đây".Làm cách nào để chọn TOP x nhưng vẫn nhận được COUNT trong toàn bộ truy vấn?

Tôi biết tôi có thể chỉ cần chạy truy vấn hai lần nhưng EWWWW đắt và lãng phí. Làm thế nào tôi có thể đạt được những gì tôi muốn mà không cần đánh thuế quá mức cơ sở dữ liệu?

Trả lời

22

Bạn có thể sử dụng COUNT(*) OVER()

SELECT TOP 20 *, 
     COUNT(*) OVER() AS TotalMatchingRows 
FROM master..spt_values 
WHERE type='P' 
ORDER BY number 

Làm hai truy vấn có thể làm việc ra hiệu quả hơn tuy nhiên đặc biệt là nếu bạn có chỉ số hẹp hơn có thể được sử dụng trong việc xác định tính hợp hàng nhưng không bao gồm toàn bộ danh sách SELECT.

+1

Tôi là một thằng ngốc, bạn là một bậc thầy zen. :-) Tôi yêu các chuyên gia SQL, không rườm rà, chỉ là sự thật. Cảm ơn Martin. – kingdango

+0

Bạn có thể làm rõ làm thế nào bạn sẽ làm điều đó với hai truy vấn? –

Các vấn đề liên quan