Cómo devolver el número total de loggings con TOP * select

Tengo más de 300 000 filas, me gustaría devolver el número total de loggings, incluso si selecciono solo 20/50/100 loggings usando la statement TOP *.

¿Es posible filtrar como seleccionar

select top 50 * from table where rule1=rule1 and rule=rule2

Digamos que el número total de loggings si la database es 300 000 y seleccionar arriba devolvería 4 000 loggings. Pero físicamente devolverá solo 50 loggings, necesito saber cómo está manu en la database usando esta sentencia where (devolvería 4000).

Gracias

Hay muchas respuestas simples a esta pregunta, como han señalado otros carteles. También hay mucha sutileza dependiendo de su escenario. Hay una discusión bastante profunda sobre el tema @ Manera eficiente de get @@ rowcount de una consulta usando row_number

 select top 50 *, count(*) over() from table where rule1=rule1 and rule=rule2 
 SELECT TOP 50 * FROM TableName t1 INNER JOIN (SELECT COUNT(*) AS CountOfRecords FROM TableName) t2 on 1=1 

Podrías hacerlo:

 select top 50 *, (select count(*) from table) from table where rule1=rule1 and rule=rule2 

Esto le dará el número total de filas como una columna adicional en cada fila devuelta por la consulta principal. Sin embargo, no estoy seguro de las implicaciones de performance en esto …

No quedó claro a partir de su pregunta si necesita que el conteo se base en el número filtrado de filas o no, pero si es así:

 select top 50 *, (select count(*) from table where rule1=rule1 and rule=rule2) from table where rule1=rule1 and rule=rule2