首页 > 解决方案 > 将 1 列拆分为 5 列

问题描述

我有一个相对简单的问题(我认为),但我无法理解它。我有一列有 200 条记录。行的值是 1-200 的数字列表(无重复)。我想将数据组织成 5 列,数据水平排序(Ascending AZ)。例子:

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,但我认为它不会起作用。

标签: sqlsql-server

解决方案


我们可以尝试一个透视查询,其中组定义为列减一除以 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;

在此处输入图像描述

演示


推荐阅读