Oracle-Complex sql视图创建

时间:2014-03-14 10:56:15

标签: sql oracle

我有一张如下表:

enter image description here

对于ID和VALUE的每个删除组合,我有几个步骤。例如,对于A和B的组合,我有三个步骤QC,LC和DR,依此类推C和D.现在,我想要一个如下视图:

enter image description here

也就是说,我希望视图中的列“OUTPUT”,我必须在QC之后为ID和VALUE的每个组合放置第一步。例如,对于A和B,QC之后的第一步是LC,因此OUTPUT值为LC。对于C和D,没有QC,因此OUTPUT值为NA。

任何人都可以帮我解决这个问题。

提前致谢。

1 个答案:

答案 0 :(得分:0)

在SQL中,表本质上是无序的。因此,您需要一个列来指定顺序。我假设您有一个列,在表中说StepOrder。如果是这样,那么你可以使用分析函数做你想做的事。

内部子查询中的lead()返回下一步。下一个子查询中的max()返回QA之后的值,输出max()将值扩展到具有相同idvalue的所有行:< / p>

select id, value, step,
       coalesce(max(qa_next) over (partition by id, value), 'NA') as "Output"
from (select t.*,
             max(case when step = 'QA' then nextstep end) over (partition by id, value) as qa_next
      from (select t.*,
                   lead(step) over (partition by id, value order by StepOrder) as nextStep
            from table t
           ) t
     ) t