It is possible, an example with nested queries, I think it would be better to rewrite it to a temporary table, but this is also possible.
select * from ( select row_number() over (order by (select null)) rn ,addressCode from action -- этот кусок можно вынести в временную таблицу ) t1 left join ( select row_number() over (order by (select null)) rn ,addressCode from action -- этот кусок можно вынести в временную таблицу ) t2 on t1.rn = (select count(*) from action) - t2.rn + 1 -- и сюда в к-во тоже подставить временную
If an ordered list fits you, it is better this way, but then without a temporary table:
select * from ( select row_number() over (order by addressCode asc) rn ,addressCode from action ) t1 left join ( select row_number() over (order by addressCode desc) rn ,addressCode from action ) t2 on t1.rn = t2.rn