Как вернуть общее количество записей с помощью TOP * select - PullRequest
2 голосов
/ 12 апреля 2011

У меня более 300 000 строк, я хотел бы вернуть общее количество записей, даже если я выберу только 20/50/100 записей с помощью оператора TOP *.

Возможно ли выбрать фильтр как

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

Скажем, общее количество записей, если база данных 300 000 и выбор выше, вернет 4 000 записей. Но физически он вернет только 50 записей, мне нужно знать, как там находится manu в базе данных, используя этот оператор where (он вернет 4000).

Спасибо

Ответы [ 4 ]

8 голосов
/ 12 апреля 2011
select top 50 *, count(*) over()
from table
where rule1=rule1 and rule=rule2
4 голосов
/ 12 апреля 2011

Существует множество простых ответов на этот вопрос, как отмечали другие авторы. Существует также много тонкости в зависимости от вашего сценария. Существует довольно глубокое обсуждение проблемы @ Эффективный способ получения @@ rowcount из запроса с использованием row_number

2 голосов
/ 12 апреля 2011
SELECT TOP 50 
  * 
FROM TableName t1
INNER JOIN (SELECT 
              COUNT(*) AS CountOfRecords 
            FROM TableName) t2 on 1=1
1 голос
/ 12 апреля 2011

Вы можете сделать:

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

Это даст вам общее количество строк в качестве дополнительного столбца для каждой строки, возвращаемой основным запросом. Не уверен, что это повлияет на производительность ...

Из вашего вопроса неясно, нужно ли, чтобы количество было основано на отфильтрованном количестве строк или нет, но если это так:

select top 50 *, (select count(*) from table where rule1=rule1 and rule=rule2) 
from table 
where rule1=rule1 and rule=rule2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...