我从一个表中提取数据,该表具有许多类似的行,这些行根据另一列的值包含我想要的列中的不同值。我想使用某些非数值的优先级从这些相似行的每组中拉出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
谢谢!
答案 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;