根据参考其他列的列值生成订单号

Generate order number based on a column value with reference to other columns

这是 Oracle 中的问题 views.I 有 table 和 Emp_idStart_PeriodKey。示例数据按开始时间段的降序排列,201909 在上。需要生成一个名为 Key_order 的列。 (最后我打算创建一个包含所有 4 列的视图。)

示例数据如图。在带有 Start_period 的排序列表中,排在第一位的数字为 1,然后在 Key 更改顺序时必须递增一个。

第 1 行和第 2 行的键相同,顺序为 1。在第 3 行中,SCD 更改为 ABC,因此顺序必须递增 1,因此顺序值为 2。第 4 个位置键更改和顺序变成 3.

看到第 7 位和第 8 位的值相同,因此两者的顺序仍然是 6。我正在尝试在视图中执行此操作。已尝试 RANK() 但它正在对列 Key 进行排序并根据它给出顺序。 请帮忙Sample Data

在与前一行具有不同键的每一行中设置一个。为此使用 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;