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

Откуда:
Сообщений: 498
Доброго дня всем!

Выполняется в некоей процедуре селект:

        insert into #client_top40
	select top 40
		client,
		sum(rest) rest
	from	#tmp
	group by owner,
		client
	order by sum(rest) desc


т.е., выбираются 40 клиентов с самыми большими остатками. Так вот есть задача - сделать по желанию пользователя выборку любого числа клиентов (вместо 40 может быть любое натуральное число).
Есть у меня два варианта
- перед основной выборкой все данные пихать в таблицу с полем-счетчиком IDENTITY(1,1) и далее в зависимости от введенного параметра выбирать нужное кол-во записей
- или сформировать динамическую строку-запрос, в который добавлять количество записей.
Может, есть еще какой-то красивый вариант?
Версия SQL Server - 2005.
2 апр 14, 10:09    [15819716]     Ответить | Цитировать Сообщить модератору
 Re: возвратить top N записей  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3274
        insert into #client_top40
	select top (@var)
	...
Начиная с 2005 можно.
2 апр 14, 10:12    [15819728]     Ответить | Цитировать Сообщить модератору
 Re: возвратить top N записей  [new]
Кавказ-сила
Member

Откуда: Москва
Сообщений: 261
http://technet.microsoft.com/en-us/library/ms189463(v=sql.90).aspx
(Using TOP with variables)
2 апр 14, 10:12    [15819730]     Ответить | Цитировать Сообщить модератору
 Re: возвратить top N записей  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
Just_Serg, у меня есть лучше предложение: заглянуть в хелп и почитать про команду.
http://msdn.microsoft.com/ru-ru/library/ms189463(v=sql.90).aspx
DECLARE @p AS int
SET @p='10'
SELECT TOP(@p)*
FROM HumanResources.Employee;
GO
2 апр 14, 10:12    [15819732]     Ответить | Цитировать Сообщить модератору
 Re: возвратить top N записей  [new]
Just_Serg
Member

Откуда:
Сообщений: 498
Ennor Tiegael
        insert into #client_top40
	select top (@var)
	...
Начиная с 2005 можно.


Да, действительно можно.

проблема была в том, что делал так:

select top @n * from #tmp
(так как всегда привык использовать TOP)

а надо было

select top(@n) * from #tmp


Спасибо!
Не ругайтесь сильно.
2 апр 14, 10:33    [15819833]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить