2011-10-05 7 views
11

Estoy escribiendo una página web para filtrar de forma interactiva los resultados en función de los criterios de filtro tal como lo especifica el usuario. Solo quiero devolver desde SQL las 20 filas más importantes, pero quiero saber cuántas filas cumplen los criterios (Recuento). Quiero poder decirle al usuario: "aquí están las 20 mejores filas que coinciden con sus criterios, y por cierto, había 2.000 filas adicionales que no mostraré aquí".¿Cómo se selecciona TOP x pero aún se obtiene un COUNT de toda la consulta?

Sé que podría simplemente ejecutar la consulta dos veces, pero EWWWW es caro y derrochador. ¿Cómo puedo lograr lo que quiero sin sobrecargar la base de datos?

Respuesta

22

Puede utilizar COUNT(*) OVER()

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

Hacer dos consultas pueden establecer de forma más eficiente, sin embargo, especialmente si usted tiene los índices más estrechos que se pueden utilizar para determinar el número de fila coincidente, pero no cubren toda la lista SELECT.

+1

Soy un idiota, eres un maestro zen. :-) Me encantan los expertos SQL, sin lujos, solo hechos. Gracias Martin. – kingdango

+0

¿Puedes aclarar cómo lo harías con dos consultas? –

Cuestiones relacionadas