create table data ( name varchar(100) )
insert into data values
('John'),
('Nancy'),
('Jem'),
('Albert'),
('Smith'),
('Daniella')
; with cte as
(
select ROW_NUMBER() over( order by (select null)) as rn , * from data
)
,
cte_odd as
(
select ROW_NUMBER() over( order by (select null)) as rn1,* from cte where Rn%2=1
)
,
cte_even as
(
select ROW_NUMBER() over( order by (select null)) as rn1,* from cte where Rn%2=0
)
select
a.name
, b.name
from
cte_odd a
join
cte_even b
on a.rn1= b.rn1
It will eventually fail because there is absolutely nothing in the original list to preserve the order you want and you cannot rely on the "implicit" order in the table.