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

时间:2009-04-03 13:31:50

标签: sql sql-server tsql

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

因此,如果我收到的数据是:

aaa
bbb
ccc
ddd
eee
fff
ggg

我需要查询将其返回为:

aaa  ddd  ggg
bbb  eee
ccc  fff

这可能吗?感谢

3 个答案:

答案 0 :(得分:10)

实际上,这不应该在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中。

答案 1 :(得分:3)

这似乎是应该在应用程序的前端处理的东西。除非有特定原因说明为什么你不能这样做,我建议你在那里处理它。

答案 2 :(得分:1)

如果只是为了格式化,那么Adam是正确的,你应该在客户端进行。

如果它与数据有关(我假设aaa和bbb不是你的实际数据),那么你可以考虑使用像SQL数据透视表来重新排序数据。

Here's an example