2013-11-12 4 views
2

У меня сейчас есть два отдельных запроса:Подсчитайте строки без отдельного счета

1) возвращает фактический набор результатов на основе различных фильтров.

select a, b, c from TableA 
where x = 123 
and y = 'ABC' 
and z = 999 

2) отображает общее количество строк.

select count(*) from TableA 
where x = 123 
and y = 'ABC' 
and z = 999 

Таким образом, я выполняю тот же запрос дважды. Запросы, которые я поставил выше в качестве примеров, намного проще, чем то, что у меня есть с несколькими объединениями и многими фильтрами.

Есть ли лучший способ добиться того же?

ответ

4
select a, b, c, count(*) over() as total 
from dbo.TableA 
where x = 123 
and y = 'ABC' 
and z = 999; 
+0

благодарит Аарона, во-первых, за редактирование моего сообщения (что делает его более читаемым), а во-вторых, для вашего ответа; и да, это действительно работало как шарм. –

+0

@Robert без проблем, рад помочь. –

0

Не могли бы вы просто вернуть счет в качестве столбца в свой первый запрос?

например.

select a, b, c, count(*) as total from TableA 
where x = 123 
and y = 'ABC' 
and z = 999 

Это позволит избежать запуска дважды

+2

Вы должны 'GROUP BY' сделать' COUNT() '. –

+0

... и GROUP BY изменит выход. –

+0

@ douga, Group By решила бы проблему получения счета, но моя выбранная часть повлияла бы на него. спасибо за вашу помощь. –

Смежные вопросы