Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Выборка с Нумерацией строк по 200 записей  [new]
Александр Сипачёв
Member

Откуда:
Сообщений: 22
Подскажите пожалуйста!
Необходимо выбрать из таблицы записи (примерно 1600 строк), но чтобы строки нумеровались в диапазоне от 1 до 200, и как только доходит до 200 нумерация опять начиналась с 1.

пример

1 строка запроса
2 строка запроса
.... строки запроса
200 строка запроса
1 строка запроса
2 строка запроса
.... строки запроса
200 строка запроса
...
1 строка запроса
2 строка запроса
.... строки запроса
200 строка запроса
22 янв 18, 14:50    [21127005]     Ответить | Цитировать Сообщить модератору
 Re: Выборка с Нумерацией строк по 200 записей  [new]
aleks222
Guest
Оо-о-о, как фсе запущено!

n%201
22 янв 18, 14:59    [21127061]     Ответить | Цитировать Сообщить модератору
 Re: Выборка с Нумерацией строк по 200 записей  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
aleks222
Оо-о-о, как фсе запущено!

n%201

никогда не читай тз, сразу пиши
22 янв 18, 15:01    [21127077]     Ответить | Цитировать Сообщить модератору
 Re: Выборка с Нумерацией строк по 200 записей  [new]
Massa52
Member

Откуда:
Сообщений: 373
Александр Сипачёв,
WITH Numbers(N) AS(SELECT 0 UNION ALL SELECT N+1 FROM Numbers WHERE N<1600)
SELECT N % 200 + 1 AS numbersto200 FROM Numbers ORDER BY N OPTION(MAXRECURSION 0);
22 янв 18, 15:22    [21127211]     Ответить | Цитировать Сообщить модератору
 Re: Выборка с Нумерацией строк по 200 записей  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
ещё один фантазёр
22 янв 18, 15:28    [21127247]     Ответить | Цитировать Сообщить модератору
 Re: Выборка с Нумерацией строк по 200 записей  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5112
Massa52,

в вашем варианте нарушается требование ТС-а
Александр Сипачёв
чтобы строки нумеровались в диапазоне от 1 до 200, и как только доходит до 200 нумерация опять начиналась с 1.
22 янв 18, 15:35    [21127302]     Ответить | Цитировать Сообщить модератору
 Re: Выборка с Нумерацией строк по 200 записей  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
Я за такой результат, но наверное есть красивее

;WITH x AS
(
	SELECT 	
	[x] = ROW_NUMBER() OVER(ORDER BY 1/0) - 1,
	*
	FROM <Table>
)
SELECT 
	[N] = [x] % 200 + 1,
	*
FROM x
22 янв 18, 15:35    [21127305]     Ответить | Цитировать Сообщить модератору
 Re: Выборка с Нумерацией строк по 200 записей  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
а, ну в общем, всё ж в строку и считает

[N] = (ROW_NUMBER() OVER(ORDER BY 1/0) - 1) % 200 + 1
22 янв 18, 15:40    [21127340]     Ответить | Цитировать Сообщить модератору
 Re: Выборка с Нумерацией строк по 200 записей  [new]
Massa52
Member

Откуда:
Сообщений: 373
Дедушка,
Я не совсем понял - есть

пример

1 строка запроса
2 строка запроса
.... строки запроса
200 строка запроса
1 строка запроса
2 строка запроса

фрагмент результата
196 строка запроса
197 строка запроса
198 строка запроса
199 строка запроса
200 строка запроса
1 строка запроса
2 строка запроса
3 строка запроса
4 строка запроса
5 строка запроса
22 янв 18, 15:54    [21127482]     Ответить | Цитировать Сообщить модератору
 Re: Выборка с Нумерацией строк по 200 записей  [new]
assmsk
Member

Откуда:
Сообщений: 169
С извращениями))

SELECT ROW_NUMBER() OVER (PARTITION BY NT ORDER BY N) NN,N FROM (
SELECT NTILE((SELECT COUNT(*)/200 FROM TABLE)) OVER (ORDER BY N) NT,n from TABLE) X
22 янв 18, 15:56    [21127498]     Ответить | Цитировать Сообщить модератору
 Re: Выборка с Нумерацией строк по 200 записей  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
Massa52,

вы подразумеваете, что где-то есть нумерация начинающаяся с 0
22 янв 18, 15:57    [21127502]     Ответить | Цитировать Сообщить модератору
 Re: Выборка с Нумерацией строк по 200 записей  [new]
Massa52
Member

Откуда:
Сообщений: 373
TaPaK,
Опять не дошло - о каом 0 - ле идет речь?
Остаток от деления N % 200 - это числа от 0 до 199
Если же прибавить к ним 1 - то получим числа от 1 до 200.
22 янв 18, 16:03    [21127547]     Ответить | Цитировать Сообщить модератору
 Re: Выборка с Нумерацией строк по 200 записей  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
Massa52
TaPaK,
Опять не дошло - о каом 0 - ле идет речь?
Остаток от деления N % 200 - это числа от 0 до 199
Если же прибавить к ним 1 - то получим числа от 1 до 200.

а что вы делите?
вот таблица
SELECT * FROM (VALUES (100),(101),(200),(301),(555)) x(a)

пронумеруйте от 1 до 3х
22 янв 18, 16:10    [21127608]     Ответить | Цитировать Сообщить модератору
 Re: Выборка с Нумерацией строк по 200 записей  [new]
Cammomile
Member

Откуда:
Сообщений: 1212
 

;WITH inpt
		 AS (
		 SELECT TOP (16)
			 name
		 FROM
			 sys.all_objects)

		 SELECT
			 Rn = ROW_NUMBER() OVER(PARTITION BY NT ORDER BY Name)
		 , Name
		 FROM
		 (
			 SELECT
				 NTILE(4) OVER(ORDER BY name) NT
			 , name
			 FROM
				 inpt
		 ) K 
22 янв 18, 16:14    [21127621]     Ответить | Цитировать Сообщить модератору
 Re: Выборка с Нумерацией строк по 200 записей  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
какая печальная тема....
22 янв 18, 16:15    [21127632]     Ответить | Цитировать Сообщить модератору
 Re: Выборка с Нумерацией строк по 200 записей  [new]
Cammomile
Member

Откуда:
Сообщений: 1212
А чем тебе Энтиль нитак? Зануда. Автор сказал, что у него 1600 строк. 1600 на 200 без остатка отлично делятся. Оконные функции быстры изящны красивы удобны стильны модны молодежны.
22 янв 18, 16:21    [21127672]     Ответить | Цитировать Сообщить модератору
 Re: Выборка с Нумерацией строк по 200 записей  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
Cammomile
А чем тебе Энтиль нитак? Зануда. Автор сказал, что у него 1600 строк. 1600 на 200 без остатка отлично делятся. Оконные функции быстры изящны красивы удобны стильны модны молодежны.

точно так и сказал что 1600?
22 янв 18, 16:25    [21127695]     Ответить | Цитировать Сообщить модератору
 Re: Выборка с Нумерацией строк по 200 записей  [new]
Massa52
Member

Откуда:
Сообщений: 373
TaPaK,
Я прогнал запрос
WITH Numbers(N) AS(SELECT 0 UNION ALL SELECT N+1 FROM Numbers WHERE N<1600)
SELECT CAST(N % 200 + 1 AS varchar(10)) + ' строка запроса' AS numbersto200 FROM Numbers ORDER BY N OPTION(MAXRECURSION 0);

И получил результат аналогичный примеру TC
В примере генерятся числа от 0 до 1600 - как написанр у TC(ну у меня на 1 больше) и этот генератор таблицы numbers из этого же форума.
Чтобы решить задачу TC нужена только таблица numbers - ну или сквозная нумерация записей.
22 янв 18, 16:29    [21127721]     Ответить | Цитировать Сообщить модератору
 Re: Выборка с Нумерацией строк по 200 записей  [new]
Cammomile
Member

Откуда:
Сообщений: 1212
А, точно. Тогда NTILE не катит, прошу пардону.
22 янв 18, 16:30    [21127730]     Ответить | Цитировать Сообщить модератору
 Re: Выборка с Нумерацией строк по 200 записей  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
Massa52,

как вы вообще читаете, то что нужно?
меня стошнило, пойду убирать
22 янв 18, 16:31    [21127735]     Ответить | Цитировать Сообщить модератору
 Re: Выборка с Нумерацией строк по 200 записей  [new]
Massa52
Member

Откуда:
Сообщений: 373
TaPaK,
От 1 до 3
WITH c AS
(SELECT *, ROW_NUMBER() OVER(ORDER BY a ASC) - 1 AS Row FROM (VALUES (100),(101),(200),(301),(555)) x(a)
)
SELECT Row % 3 + 1 AS Ot1do3, a  FROM c


Ot1do3 a
1 100
2 101
3 200
1 301
2 555
22 янв 18, 16:57    [21127852]     Ответить | Цитировать Сообщить модератору
 Re: Выборка с Нумерацией строк по 200 записей  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
Massa52,

О, вы увидели что, что-то надо нумеровать и вычитать, прогресс налицо
ну и: 21127340
22 янв 18, 17:08    [21127906]     Ответить | Цитировать Сообщить модератору
 Re: Выборка с Нумерацией строк по 200 записей  [new]
Massa52
Member

Откуда:
Сообщений: 373
TaPaK,
Я то раньше увидел пример - и не мог понять к чему он - там то 0-й нет, отсчет вроде от 100.
а оказывается речь шла о скозной нумерации начинающей с 0.
Прошу прощения - долго догонял ваш 0.
22 янв 18, 17:23    [21127947]     Ответить | Цитировать Сообщить модератору
 Re: Выборка с Нумерацией строк по 200 записей  [new]
Александр Сипачёв
Member

Откуда:
Сообщений: 22
Вот это
WITH c AS
(SELECT *, ROW_NUMBER() OVER(ORDER BY a ASC) - 1 AS Row FROM (VALUES (100),(101),(200),(301),(555)) x(a)
)
SELECT Row % 3 + 1 AS Ot1do3, a FROM c

работает отлично!
СПАСИБО!
12 фев 18, 17:40    [21186121]     Ответить | Цитировать Сообщить модератору
 Re: Выборка с Нумерацией строк по 200 записей  [new]
Jaffar
Member

Откуда:
Сообщений: 633
Опять ругань по пустякам.

declare @Num int
-------------------
set @Num = 7 -- здесь 200 или сколько хочешь
-------------------
select o.object_ID, o.Name,
IsNULL(NULLIf(row_number() over(order by o.object_ID asc) % @Num, 0), @Num) NN 
from  sys.objects o with(nolock)
order by o.object_ID asc
13 фев 18, 14:11    [21187825]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить