По правде говоря, этого нельзя делать в SQL. Если спаривание aaa, ddd и ggg не имеет какого-либо значения, тогда это форматирование на стороне клиента и не должно выполняться на сервере.
EDIT:
В интересах интеллектуальных упражнений что-то вроде этого, похоже, работает.
select
f1.data, f2.data, f3. data
from (select data, ROW_NUMBER() over (order by data) as row_num from your_table) f1
left join (select data, ROW_NUMBER() over (order by data) as row_num from your_table) f2 on f2.row_num = f1.row_num + (select CEILING(COUNT(1) / 3) + 1 from your_table)
left join (select data, ROW_NUMBER() over (order by data) as row_num from your_table) f3 on f3.row_num = f1.row_num + (select CEILING(COUNT(1) / 3) + 1 from your_table) * 2
where f1.row_num between 1 and FLOOR((select COUNT(1) from your_table) / 3) + 1
Но, опять же, я подозреваю, что это действительно то, что должно быть сделано на стороне клиента, а не в SQL.