根据非数字优先级选择许多相似行中的1个

时间:2014-03-19 14:46:43

标签: sql oracle oracle11g

我从一个表中提取数据,该表具有许多类似的行,这些行根据另一列的值包含我想要的列中的不同值。我想使用某些非数值的优先级从这些相似行的每组中拉出1行。

在下面的例子中,我希望每个field1值有1行,给我一行" W"在field2中如果可用。如果" W"在field2中不可用,那么我想要" C"行。如果" C"是不是在field2然后最后给我行" O"在field2。

示例表:

field1  field2  field3  field4
1       O       1/1/13
1       W       1/1/13  5/2/13
2       C       1/1/13
2       O    
3       W               2/1/14
3       C       9/3/13  1/5/14
4       C               11/5/13
4       O       1/2/12
4       W       1/2/12  5/7/14
5       O      

期望的结果:

field1  field2  field3  field4
1       W       1/1/13  5/2/13
2       C       1/1/13
3       W               2/1/14
4       W       1/2/12  5/7/14
5       O

谢谢!

1 个答案:

答案 0 :(得分:0)

您可以使用row_number()

执行此操作
select field1, field2, field3, field4
from (select t.*,
             row_number() over (partition by field1
                                order by (case when field2 = 'W' then 1
                                               when field2 = 'C' then 2
                                               when field2 = 'O' then 3
                                               else 4
                                         )
                               ) as seqnum
      from table t
     ) t
where seqnum = 1;