Создать номер заказа на основе значения столбца со ссылкой на другие столбцы - PullRequest
2 голосов
/ 22 сентября 2019

Это вопрос в представлениях Oracle. У меня есть таблица с Emp_id, Start_Period и Key.Пример данных приведен в порядке убывания начального периода с 201909 сверху.Нужно сгенерировать столбец с именем Key_order.(Наконец, я планирую создать представление со всеми 4 столбцами.)

С примерами данных, как показано.В отсортированном списке с Start_period то, что когда-либо появляется на первой позиции с номером 1, а затем включается, когда порядок смены ключей должен увеличиваться на единицу.

То есть в строке 1 и 2 ключ одинаков и порядокравно 1. В строке 3 SCD изменено на ABC, поэтому порядок должен увеличиваться на 1, поэтому значение ордера равно 2. Ключ 4-й позиции изменяется, и порядок становится равным 3.

См. в 7-й и 8-й позиции значение одинаково, поэтомупорядок остается 6 для обоих.Я пытаюсь сделать это в представлении.Пробовал RANK() но это сортировка столбца Key и выдача порядка на основе этого.Пожалуйста, помогите. Пример данных

1 Ответ

1 голос
/ 22 сентября 2019

Установите по одному в каждой строке, ключ которой отличается от предыдущего.Для этого используйте LAG.Затем создайте итоговую сумму из них с SUM OVER.

select
  emp_id, start_period, key,
  sum(chg) over (partition by emp_id order by start_period desc) as key_order
from
(
  select
    emp_id, start_period, key,
    case when key = lag(key) over (partition by emp_id order by start_period desc) 
         then 0 else 1 end as chg
  from mytable
)
order by emp_id, start_period desc;
...