将1列分成5列

时间:2019-07-27 16:12:29

标签: sql sql-server

我有一个相对简单的问题(我认为),但是我无法解决。我有一列200条记录。行的值是数字1-200的列表(无重复)。我想在5列中组织数字,并将数据水平排序(升序A-Z)。示例:

Original table:
Column1
1
2
3
4
5
6
7
8
...and so on to 200

查看结果应如下所示:

|Col1|Col2|Col3|Col4|Col5|
   1    2    3    4    5
   6    7    8    9   10
   11   12  ...an so on to 200

我调查了PIVOTING,但我认为这行不通。

1 个答案:

答案 0 :(得分:5)

我们可以尝试进行数据透视查询,将组定义为减去一的列除以5。这会将前五个记录放入第一个组/行中,然后将五个放入第二个组/行中,依此类推。然后,我们以每个Column1 % 5值为中心,以确定每个值将进入五列中。

SELECT
    MAX(CASE WHEN Column1 % 5 = 1 THEN Column1 END) AS Col1,
    MAX(CASE WHEN Column1 % 5 = 2 THEN Column1 END) AS Col2,
    MAX(CASE WHEN Column1 % 5 = 3 THEN Column1 END) AS Col3,
    MAX(CASE WHEN Column1 % 5 = 4 THEN Column1 END) AS Col4,
    MAX(CASE WHEN Column1 % 5 = 0 THEN Column1 END) AS Col5
FROM yourTable
GROUP BY
    (Column1 - 1) / 5;

enter image description here

Demo