Я не ожидал, что Тим перепостит, и я работал над этим. Это решение для 2 столбцов и столько строк, сколько необходимо.
ПРИМЕЧАНИЕ: целочисленная математика возвращает целые числа, а также обратите внимание, что% - это функция мода в математике
select *
into #temp
from (values('a'),('b'),('c'),('d'),('e'),('f'),('g'),('h')) a(name)
;with cte as
(
select rn = row_number() over (order by name)-1
,name
from #temp
)
select rn / 2
,max(case when rn % 2 = 0 then name end) Name1
,max(case when rn % 2 = 1 then name end) Name2
from cte
group by rn / 2