powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Интересная номерация строк запроса
23 сообщений из 23, страница 1 из 1
Интересная номерация строк запроса
    #39300263
KaTaFaLk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Приветствую
Прошу помощи в решении вопроса

Есть некое число n (допустим 5) и некая выборка порядка 1к - 10к записей.
Необходимо пронумеровать строки следующим образом:
1
2
3
4
5
5
4
3
2
1
1
2
3
...
Моих знаний для этого не хватило :(

Из последних идей:
- model но с ним я пока совсем на "вы"
- разбить всю выборку через ntil, но это пока совсем на уровне фантазии; не упел попробовать

Заранее спасибо за помощь
Слава багу!
...
Рейтинг: 0 / 0
Интересная номерация строк запроса
    #39300276
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пронумеровать где ?

А так, остаток от деления на 10, плюс, если больше 5, вычитаешь его из 10, как-то так (точные циферки сам нарисуешь)...
...
Рейтинг: 0 / 0
Интересная номерация строк запроса
    #39300282
KaTaFaLk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вячеслав ЛюбомудровПронумеровать где ?
в результатах выборки/запроса

т.е. запрос должен возвращать прономерованные записи
...
Рейтинг: 0 / 0
Интересная номерация строк запроса
    #39300318
KaTaFaLk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вячеслав Любомудров,

Благодарю,
получилось вот так:
Код: plsql
1.
2.
3.
4.
5.
       Case
         When mod (rownum, 10) > 5 Then 11 - mod (rownum, 10)
         When mod (rownum, 10) = 0 Then 1
         Else mod (rownum, 10)
       End
...
Рейтинг: 0 / 0
Интересная номерация строк запроса
    #39300333
KaTaFaLkполучилось вот так:
Код: plsql
1.
2.
3.
4.
5.
       Case
         When mod (rownum, 10) > 5 Then 11 - mod (rownum, 10)
         When mod (rownum, 10) = 0 Then 1
         Else mod (rownum, 10)
       End



так у тебя будет 3 единицы вместо двух
...
Рейтинг: 0 / 0
Интересная номерация строк запроса
    #39300399
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
with t as (select rownum ord from dual connect by level <= 20)
--------------------------------------------------------------
select ord
     , least(mod(ord-1,10)+1, 10-mod(ord-1,10)) n1
     , decode(mod(ord,10), 6,5, 7,4, 8,3, 9,2, 0,1, mod(ord,10)) n2
     , to_number(translate(mod(ord,10),'1234567890','1234554321')) n3
     , case when mod(ord-1,10) < 5 then mod(ord,10)
       else 10-mod(ord-1,10) end n4
     , abs((mod(ord+4,10)-5))+mod(ceil(ord/5.1),2) n5
from t
order by ord

ORD N1 N2 N3 N4 N5
--- -- -- -- -- --
  1  1  1  1  1  1 
  2  2  2  2  2  2 
  3  3  3  3  3  3 
  4  4  4  4  4  4 
  5  5  5  5  5  5 
  6  5  5  5  5  5 
  7  4  4  4  4  4 
  8  3  3  3  3  3 
  9  2  2  2  2  2 
 10  1  1  1  1  1 
 11  1  1  1  1  1 
 12  2  2  2  2  2 
 13  3  3  3  3  3 
 14  4  4  4  4  4 
 15  5  5  5  5  5 
 16  5  5  5  5  5 
 17  4  4  4  4  4 
 18  3  3  3  3  3 
 19  2  2  2  2  2 
 20  1  1  1  1  1 

20 rows selected
...
Рейтинг: 0 / 0
Интересная номерация строк запроса
    #39300401
ошибся
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
элементарно, ватсонтак у тебя будет 3 единицы вместо двух
...
Рейтинг: 0 / 0
Интересная номерация строк запроса
    #39300462
andrey_anonymous,

а где вариант через округление синуса?
...
Рейтинг: 0 / 0
Интересная номерация строк запроса
    #39300497
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
фурье рядома где вариант через округление синуса?
Серый, ты - гения! (с)
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
with t as (select rownum ord from dual connect by level <= 20)
select ord
     , dense_rank() over(order by trunc(sin(mod(ord-1,10)/9*asin(1)*2),2)) n6
from t
order by ord

ORD N6
--- --
  1  1 
  2  2 
  3  3 
  4  4 
  5  5 
  6  5 
  7  4 
  8  3 
  9  2 
 10  1 
 11  1 
 12  2 
 13  3 
 14  4 
 15  5 
 16  5 
 17  4 
 18  3 
 19  2 
 20  1 

20 rows selected
...
Рейтинг: 0 / 0
Интересная номерация строк запроса
    #39300539
Зачем asin?
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plsql
1.
2.
3.
4.
with t as (select rownum ord from dual connect by level <= 20)
select ord, Round(sin((ord+5)/(3.14159/2)+(3.14159/3))*2.0+3.0) n6
from t
order by ord
...
Рейтинг: 0 / 0
Интересная номерация строк запроса
    #39300591
Зачем asin?,

и сколько ваш (3.14159/2) здц даст на 2000 строке?
...
Рейтинг: 0 / 0
Интересная номерация строк запроса
    #39300730
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
еще в копилку:
Код: plsql
1.
5.5-abs(4.5-mod(ord-1,10))
...
Рейтинг: 0 / 0
Интересная номерация строк запроса
    #39301115
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
with t as (select rownum ord from dual connect by level <= 20)
--------------------------------------------------------------
select ord
     , least(mod(ord-1,10)+1, 10-mod(ord-1,10)) n1
     , decode(mod(ord,10), 6,5, 7,4, 8,3, 9,2, 0,1, mod(ord,10)) n2
     , to_number(translate(mod(ord,10),'1234567890','1234554321')) n3
     , case when mod(ord-1,10) < 5 then mod(ord,10)
       else 10-mod(ord-1,10) end n4
     , abs((mod(ord+4,10)-5))+mod(ceil(ord/5.1),2) n5
from t
order by ord

ORD N1 N2 N3 N4 N5
--- -- -- -- -- --
  1  1  1  1  1  1 
  2  2  2  2  2  2 
  3  3  3  3  3  3 
  4  4  4  4  4  4 
  5  5  5  5  5  5 
  6  5  5  5  5  5 
  7  4  4  4  4  4 
  8  3  3  3  3  3 
  9  2  2  2  2  2 
 10  1  1  1  1  1 
 11  1  1  1  1  1 
 12  2  2  2  2  2 
 13  3  3  3  3  3 
 14  4  4  4  4  4 
 15  5  5  5  5  5 
 16  5  5  5  5  5 
 17  4  4  4  4  4 
 18  3  3  3  3  3 
 19  2  2  2  2  2 
 20  1  1  1  1  1 

20 rows selected

сколько лишнего кода
...
Рейтинг: 0 / 0
Интересная номерация строк запроса
    #39301371
Фотография Vadim Lejnin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtenderеще в копилку:
Код: plsql
1.
5.5-abs(4.5-mod(ord-1,10))



шикарно! Я возился с таким решением, но чуток не допер :)
...
Рейтинг: 0 / 0
Интересная номерация строк запроса
    #39301427
j2k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KaTaFaLk Есть некое число n (допустим 5)
А предложенные решения отработают если например N = 13 (в подробности алгоритмов не вдавался :) )?
...
Рейтинг: 0 / 0
Интересная номерация строк запроса
    #39301464
j2kKaTaFaLk Есть некое число n (допустим 5)
А предложенные решения отработают если например N = 13 (в подробности алгоритмов не вдавался :) )?

разумеется, нет: вдайся в подробность алгоритмов, вдайся!
андрей_анонимус крут! решение синусом них*я не понял, но трепещу от благолепия.
экстендер - профи с большой буквы: только у них просто, ясно и никому не пришло в голову!
андреюэмикс стоило бы предложить свой вариант, а потом уже пи__е_ь.
...
Рейтинг: 0 / 0
Интересная номерация строк запроса
    #39301500
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
празднующий захантенный увольняшандреюэмикс стоило бы предложить свой вариант, а потом уже пи__е_ь.уже всё предложили
остаются только варианты
Код: plsql
1.
2.
3.
4.
with t as(select rownum n from dual connect by rownum < 100)
select n,
       substr('1234554321', mod(n, 10), 1)
  from t
...
Рейтинг: 0 / 0
Интересная номерация строк запроса
    #39301524
+ в карму
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andreymxуже всё предложили
остаются только варианты
Код: plsql
1.
2.
3.
4.
with t as(select rownum n from dual connect by rownum < 100)
select n,
       substr('1234554321', mod(n, 10), 1)
  from t


в точку и просто
...
Рейтинг: 0 / 0
Интересная номерация строк запроса
    #39301572
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
гениально
...
Рейтинг: 0 / 0
Интересная номерация строк запроса
    #39301619
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymxпразднующий захантенный увольняшандреюэмикс стоило бы предложить свой вариант, а потом уже пи__е_ь.уже всё предложили
остаются только варианты
Код: plsql
1.
2.
3.
4.
with t as(select rownum n from dual connect by rownum < 100)
select n,
       substr('1234554321', mod(n, 10), 1)
  from t

последняя единица была лишней
Код: plsql
1.
2.
3.
4.
with t as(select rownum n from dual connect by rownum < 100)
select n,
       substr('123455432', mod(n, 10), 1)
  from t

из-за особенностей Оракловой substr вызовы substr('12', 1, 1) и substr('12', 0, 1) выдают идентичный результат


поэтому лучше как-то так
Код: plsql
1.
2.
3.
4.
WITH T AS(SELECT ROWNUM n FROM dual connect BY ROWNUM < 100)
SELECT n,
       SUBSTR('1123455432', MOD(n, 10)+1, 1)
  FROM T
...
Рейтинг: 0 / 0
Интересная номерация строк запроса
    #39302008
KaTaFaLk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
О_О
спасибо всем
...
Рейтинг: 0 / 0
Интересная номерация строк запроса
    #39302077
j2k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для разных N
Код: plsql
1.
2.
3.
with t as (select rownum ord from dual connect by level <= 100)
select ord, row_number() over(partition by trunc((ord-1)/&N) order by trunc((ord-1)/&N), case when mod(trunc((ord-1)/&N),2)=1 then -ord else ord end ) a1
from t order by ord
...
Рейтинг: 0 / 0
Интересная номерация строк запроса
    #39302504
heroin2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
для степеней 2. n=2,4,8,16..
Код: plsql
1.
bitand(case bitand(rownum-1,4/*:n*/) when 0 then rownum-1 else -rownum end,3/*:n-1*/)+1 bb4
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Интересная номерация строк запроса
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]