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

Откуда: Киев
Сообщений: 3390
вроде понтовая задача.
а сообразить не получается.

with t
as 
(select trunc(dbms_random.value(1, 1000)) from dual connect by level <= 30)
select t.*
from t

как проставить нумерацию строк, допустим секцяиями по 6.
т.е. 1.2.3.4.5.6, и заново 1.2.3.4.5.6 и т.д.

напрашивается конечно
row_number() over (partition by)
но надо придумать какой то виртульный партишн. и по нему уже можно будет сделать row_number
6 апр 10, 17:31    [8587996]     Ответить | Цитировать Сообщить модератору
 Re: нумерация строк  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
остаток от деления row_number на шесть
6 апр 10, 17:32    [8588006]     Ответить | Цитировать Сообщить модератору
 Re: нумерация строк  [new]
comphead
Member

Откуда: Киев
Сообщений: 3390
Паганель
остаток от деления row_number на шесть

боюсь на больших объемах и больших делениях, могут задвоится строки.
6 апр 10, 17:34    [8588012]     Ответить | Цитировать Сообщить модератору
 Re: нумерация строк  [new]
comphead
Member

Откуда: Киев
Сообщений: 3390
Паганель
остаток от деления row_number на шесть


понял, подходит! )
6 апр 10, 17:35    [8588018]     Ответить | Цитировать Сообщить модератору
 Re: нумерация строк  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116217
Есть еще такая аналитическая функция NTILE . Она тоже разобьет на 6 частей,
правда не уверен, что Вас так устроит, гляньте

SQL> with t
  2  as
  3  (select trunc(dbms_random.value(1, 1000)) tt from dual connect by level <= 30)
  4  select t.*, ntile(6) over (order by tt)
  5  from t
  6  /
 
        TT NTILE(6)OVER(ORDERBYTT)
---------- -----------------------
        95                       1
       114                       1
       144                       1
       168                       1
       221                       1
       291                       2
       325                       2
       334                       2
       366                       2
       386                       2
       427                       3
       471                       3
       509                       3
       518                       3
       550                       3
       603                       4
       620                       4
       636                       4
       660                       4
       672                       4
 
        TT NTILE(6)OVER(ORDERBYTT)
---------- -----------------------
       674                       5
       687                       5
       701                       5
       776                       5
       788                       5
       798                       6
       889                       6
       949                       6
       954                       6
       990                       6
 
30 rows selected
 
SQL> 
6 апр 10, 17:56    [8588175]     Ответить | Цитировать Сообщить модератору
 Re: нумерация строк  [new]
comphead
Member

Откуда: Киев
Сообщений: 3390
dmidek,

да. я и забыл про нее.
но и используя ее, надо оборачивать в подзапрос. вложенные оконные фукнции не поддерживаются.
6 апр 10, 18:03    [8588219]     Ответить | Цитировать Сообщить модератору
 Re: нумерация строк  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116217
comphead
dmidek,

да. я и забыл про нее.
но и используя ее, надо оборачивать в подзапрос. вложенные оконные фукнции не поддерживаются.


Это замечание я к сожалению не понял.
6 апр 10, 18:10    [8588257]     Ответить | Цитировать Сообщить модератору
 Re: нумерация строк  [new]
comphead
Member

Откуда: Киев
Сообщений: 3390
dmidek
comphead
dmidek,

да. я и забыл про нее.
но и используя ее, надо оборачивать в подзапрос. вложенные оконные фукнции не поддерживаются.


Это замечание я к сожалению не понял.


в том плане, что нельзя сделать
6 апр 10, 18:15    [8588281]     Ответить | Цитировать Сообщить модератору
 Re: нумерация строк  [new]
comphead
Member

Откуда: Киев
Сообщений: 3390
dmidek
comphead
dmidek,

да. я и забыл про нее.
но и используя ее, надо оборачивать в подзапрос. вложенные оконные фукнции не поддерживаются.


Это замечание я к сожалению не понял.

пардон. нельзя сделать
row_number() over (partition by ntile blablabla order by null) rn
надо будет NTILE оборачивать подзапросом.

row_number() over (partition by ceil(rownum / 6) order by null) rn
а вот так можно без доп. подзапроса.
6 апр 10, 18:16    [8588290]     Ответить | Цитировать Сообщить модератору
 Re: нумерация строк  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116217
comphead
dmidek
comphead
dmidek,

да. я и забыл про нее.
но и используя ее, надо оборачивать в подзапрос. вложенные оконные фукнции не поддерживаются.


Это замечание я к сожалению не понял.

пардон. нельзя сделать
row_number() over (partition by ntile blablabla order by null) rn
надо будет NTILE оборачивать подзапросом.

row_number() over (partition by ceil(rownum / 6) order by null) rn
а вот так можно без доп. подзапроса.


А , мы не поняли друг друга. Я имел в виду использовать NTILE as is, без всяких
нахлобученных row_number. Но для Вас очевидно важно именно чередование по
порядку, а не разбиение на 6 частей сплошными кусками.
6 апр 10, 18:18    [8588303]     Ответить | Цитировать Сообщить модератору
 Re: нумерация строк  [new]
4ton
Member

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


row_number() over (partition by ceil(rownum / 6) order by null) rn
а вот так можно без доп. подзапроса.


Зачем так сложно, почему не
mod(rownum-1,6)+1 ?
6 апр 10, 19:00    [8588509]     Ответить | Цитировать Сообщить модератору
 Re: нумерация строк  [new]
бобищо
Member [заблокирован]

Откуда:
Сообщений: 245
маразм крепчал
6 апр 10, 19:15    [8588562]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить