在垂直排序的单独列中返回sql查询结果

在垂直排序的单独列中返回sql查询结果,sql,sql-server,tsql,Sql,Sql Server,Tsql,我如何重写查询“从tbl1中选择col1”以便将结果拆分为三列-每列对结果进行垂直排序 所以如果我得到的数据是: aaa bbb ccc ddd eee fff ggg 我需要查询将其返回为: aaa ddd ggg bbb eee ccc fff 这可能吗?谢谢事实上,这不应该在SQL中完成。除非aaa、ddd和ggg的配对具有某种意义,否则这是客户端格式化,不应该在服务器上进行 编辑: 从智力锻炼的角度来看,这种方法似乎是可行的 select f1.data, f2.da

我如何重写查询“从tbl1中选择col1”以便将结果拆分为三列-每列对结果进行垂直排序

所以如果我得到的数据是:

aaa
bbb
ccc
ddd
eee
fff
ggg
我需要查询将其返回为:

aaa  ddd  ggg
bbb  eee
ccc  fff

这可能吗?谢谢

事实上,这不应该在SQL中完成。除非aaa、ddd和ggg的配对具有某种意义,否则这是客户端格式化,不应该在服务器上进行

编辑:

从智力锻炼的角度来看,这种方法似乎是可行的

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中。

这似乎应该在应用程序前端处理。除非有具体的原因说明您不能这样做,否则我建议您在那里处理它。

如果只是为了格式化,那么Adam是正确的,您应该在客户端处理它

如果它是与数据相关的(我假设AAA和BBB不是你的实际数据),那么你可以考虑一些类似于SQL PIVOT的数据来重新排序。


我最终在客户端完成了这项工作。我正在用一个只接受数据表的工具(vb.net)进行邮件合并,虽然我不喜欢它,但我不知道还有什么其他方法可以做到。我最终创建了一个新的datatable,并用原始查询中的数据填充它。谢谢你的帮助。