本题容易形成的纠结是使用窗口函数受排序的影响,所以需要消除这影响,就需要用到from...join...on...建立联结表来消除并恢复到原有表的状态。


首先,使用窗口函数:

select first_name
from(select first_name,
            row_number() over(order by first_name) as first_name_row
     from employees) as e
where mod(first_name_row,2)=1;

最终,用到from...join...on...建立联结表实现题目的显示需求

select e1.first_name         -- 注意显示的原表employees.first_name即可是原表不排序状态
from employeesa as e1 join (select first_name,       -- 通过from ...join...on...建立表联结来消除first_name升序带来的排序影响,恢复到原表的显示状态
                                   row_number() over(order by first_name) as first_name_row
                            from employeesa) as e2
on e1.first_name=e2.first_name
where mod(first_name_row,2)=1;