oracle - нет раздела в оконной функции, но заполняются последовательные числа для свойств acd - PullRequest
0 голосов
/ 21 ноября 2018

У меня есть таблица свойств acd с 3 столбцами - id, acd и rpt.Значение rpt устанавливается в 1, когда оно впервые сообщается для свойства acd, но если какие-либо последующие свойства acd повторяются, оно устанавливается равным 0. Столбец id всегда увеличивается (вроде pk).Теперь для непрерывных нулей мне нужны порядковые числа, начиная с 2,3 ..., как показано в столбце «Разыскивается».

id  acd  rpt wanted
1   a    1    1
2   b    1    1
3   b    0    2
4   a    1    1
5   a    0    2
6   a    0    3
7   d    1    1
8   d    0    2
9   d    0    3
10  c    1    1
11  c    0    2
12  c    0    3
13  c    0    4
14  c    0    5
15  d    1    1
16  a    1    1

Я попробовал оконную функцию, но когда я использую столбец «значение» в предложении раздела, он группирует все, что нежелательно.Можно ли получить результаты, как в столбце «хотел» с учетом увеличения rpt и id.

Ответы [ 2 ]

0 голосов
/ 21 ноября 2018

Вам нужны вложенные OLAP-функции:

SELECT dt.*,
   Row_Number() Over (PARTITION BY grp ORDER BY id)
FROM
 ( -- calculate a group number using a Cumulative Sum over 0/1 (for partitioning in next step)
   SELECT prop.*, Sum(rpt) Over (ORDER BY id ROWS Unbounded Preceding) AS grp
   FROM prop
 ) dt
0 голосов
/ 21 ноября 2018

Когда rpt = 1, тогда вы хотите 1.Затем вы хотите перечислить 0 для каждого acd.Если это правильно, то логика:

select t.*,
       (case when rpt = 1 then 1
             else 1 + row_number() over (partition by acd, rpt order by id)
        end) as wanted
from t;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...