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

时间:2019-09-22 07:51:45

标签: oracle scd

这在Oracle视图中是一个问题。我有一个包含Emp_idStart_PeriodKey的表。样本数据以开始时间的降序给出,顶部为201909。需要生成一个名为Key_order的列。 (最后,我打算创建一个包含所有4列的视图。)

具有所示的示例数据。在带有Start_period的排序列表中,从第1位到第1位然后在键更改顺序必须加一时出现的第一个位置。

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

请参见第7位和第8位的位置值相同,因此两者的顺序均保持为6。我正在尝试在视图内执行此操作。尝试过RANK(),但它正在对Key列进行排序并根据该命令给出顺序。 请帮助。Sample Data

1 个答案:

答案 0 :(得分:1)

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