sql - SQL Server - 将行透视为固定数目的列,其中列已排序而不是行

  显示原文与译文双语对照的内容

我使用SQL Server 2012,我尝试'pivot'表输出,以便我可以重新格式化结果表,以便向用户显示,描述它的最简单的方法是使用示例:


MyCol


1


2


3


4


5


6


7


8


9


10


11


12


13


14


15


16


17




Col1 Col2 Col3


1 7 13


2 8 14


3 9 15


4 10 16


5 11 17


6 12



我考虑使用临时表来存储相关的行值,然后查询那些行值,但是,它看起来有点长,除了专业知识之外,还有一种流畅的方法。

时间:

使用窗口函数枚举和计数行,然后使用一些算法来分配位置:


select (case when mycol < ceil(cnt / 3) then mycol end) as col1,


 (case when mycol >= ceil(cnt / 3) and mycol < 2*ceil(cnt / 3) then mycol end) as col2,


 (case when mycol >= 2*ceil(cnt / 3) then mycol end) as col3 


from (select t.*,


 row_number() over (order by mycol) - 1 as seqnum,


 count(*) over () as cnt


 from t


 ) t


group by mycol % ceil(cnt / 3)



...