Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Получение диапазона строк и общего кол-ва в Select  [new]
rinat mergenbaev
Member

Откуда:
Сообщений: 100
Привет.

Есть процедура, которая делает тяжелый селект и возвращает на страницу данные.
На странице которая вызывает эту процедуру реализован Paging, т.к. итоговое кол-во данных может быть достаточно велико > 1,5 млн строк
Соотвественно в процедуру передаются параметры

@PageNumber INT,
	@PageSize INT,	
	@TotalItems INT OUTPUT	


и дальше уже через

SELECT ... RANK() as RowNumber 
FROM ....
WHERE RowNumber BETWEEN ((@PageNumber - 1) * @PageSize) + 1 AND (@PageNumber * @PageSize)


выбирается нужный диапазон строк.
Задача: не делая второго тяжелого селекта узнать общее кол-во данных попадающих в селект, чтобы вернуть это в переменную @TotalItems

Как сделать?
1 ноя 13, 09:05    [15062431]     Ответить | Цитировать Сообщить модератору
 Re: Получение диапазона строк и общего кол-ва в Select  [new]
rinat mergenbaev
Member

Откуда:
Сообщений: 100
rinat mergenbaev,

добавлю.
сейчас пока сделал так. Но как то некашерно выглядит сий код

with cte as
(  
  select .... rank() as rownumber()
), Total AS 
	 (
		SELECT COUNT(1) TotalItems FROM CTE
	 )

select c1.*, c2.TotalItems
from cte c1, Total c2
1 ноя 13, 09:14    [15062455]     Ответить | Цитировать Сообщить модератору
 Re: Получение диапазона строк и общего кол-ва в Select  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1887
select * from table
set @TotalItems = @@rowcount
1 ноя 13, 09:31    [15062506]     Ответить | Цитировать Сообщить модератору
 Re: Получение диапазона строк и общего кол-ва в Select  [new]
rinat mergenbaev
Member

Откуда:
Сообщений: 100
LexusR
select * from table
set @TotalItems = @@rowcount


@@rowcount - вернет @PageSize.
Надо общее кол-во, чтобы правильно нарисовать пейджинг
1 ноя 13, 09:41    [15062553]     Ответить | Цитировать Сообщить модератору
 Re: Получение диапазона строк и общего кол-ва в Select  [new]
baracs
Member

Откуда: Москва
Сообщений: 7217
rinat mergenbaev,

Сложите всю выборку во временную таблицу и оттуда делайте ваш пейджинг.

З.Ы. Вы серьезно считатете, что кто-то когда-то будет просматривать 1.5 млн строк?
1 ноя 13, 09:52    [15062608]     Ответить | Цитировать Сообщить модератору
 Re: Получение диапазона строк и общего кол-ва в Select  [new]
rinat mergenbaev
Member

Откуда:
Сообщений: 100
baracs
rinat mergenbaev,

Сложите всю выборку во временную таблицу и оттуда делайте ваш пейджинг.


думал тоже. но как то неохота на такие большие объемы делать временную таблицу. Много запросов на данный отчет + много процедур которые тоже создают временные таблицы. Боюсь за tempdb


baracs
З.Ы. Вы серьезно считатете, что кто-то когда-то будет просматривать 1.5 млн строк?


Нет.
но это желание юзера, типа "если данных много то выгрузимм в эксель, а если нет, то просмотрим на странице"
думал еще над пейджингом а-ля "показать следующие N записей" вместо показа общего кол-ва
1 ноя 13, 10:01    [15062646]     Ответить | Цитировать Сообщить модератору
 Re: Получение диапазона строк и общего кол-ва в Select  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3422
rinat mergenbaev,

А что,
count(*) over()
не подходит, или сильно тормозит?
1 ноя 13, 10:23    [15062757]     Ответить | Цитировать Сообщить модератору
 Re: Получение диапазона строк и общего кол-ва в Select  [new]
Добрый Э - Эх
Guest
rank() прикрутил, а до count(1) over() не дошел, что ли?
1 ноя 13, 10:23    [15062758]     Ответить | Цитировать Сообщить модератору
 Re: Получение диапазона строк и общего кол-ва в Select  [new]
rinat mergenbaev
Member

Откуда:
Сообщений: 100
Ennor Tiegael
rinat mergenbaev,

А что,
count(*) over()
не подходит, или сильно тормозит?


не знал про такую конструкцию.
Спасибо!

в общем считал результат выборки во временную таблицу - ибо там данных не больше PageSize. Оттуда получил TotalItems.
А клиенту вернул таблицу без лишнего столбца.

Лучше решения не придумал
1 ноя 13, 10:33    [15062818]     Ответить | Цитировать Сообщить модератору
 Re: Получение диапазона строк и общего кол-ва в Select  [new]
Гость333
Member

Откуда:
Сообщений: 3683
rinat mergenbaev
если данных много то выгрузимм в эксель

В Excel можно выгрузить максимум 1 млн. строк. Ну, на самом деле 2^20, но всё равно 1,5 млн. на одном листе не поместятся.
1 ноя 13, 11:00    [15062993]     Ответить | Цитировать Сообщить модератору
 Re: Получение диапазона строк и общего кол-ва в Select  [new]
rinat mergenbaev
Member

Откуда:
Сообщений: 100
Гость333
rinat mergenbaev
если данных много то выгрузимм в эксель

В Excel можно выгрузить максимум 1 млн. строк. Ну, на самом деле 2^20, но всё равно 1,5 млн. на одном листе не поместятся.


делаю разбивку по листам. на листе 1,048К строк
1 ноя 13, 11:04    [15063014]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить