在列中转置固定数量的行

Transpose fixed number of rows in columns

我有一个下面提到的数据集(一列,多行)。我想转置列中的前 5 行 - 第 1 行,第 2 行列中的下 5 行,依此类推。谁能帮我 SQL 查询来实现这个

我们可以使用 ROW_NUMBER 和模数设置一个数据透视查询,以将值放在您想要的位置:

WITH cte AS (
    SELECT col, ROW_NUMBER() OVER (ORDER BY col) rn
    FROM yourTable
)

SELECT
    MAX(CASE WHEN (rn - 1) % 5 = 0 THEN col END) AS col1,
    MAX(CASE WHEN (rn - 1) % 5 = 1 THEN col END) AS col2,
    MAX(CASE WHEN (rn - 1) % 5 = 2 THEN col END) AS col3,
    MAX(CASE WHEN (rn - 1) % 5 = 3 THEN col END) AS col4,
    MAX(CASE WHEN (rn - 1) % 5 = 4 THEN col END) AS col5
FROM cte
GROUP BY (rn - 1) / 5;

Demo

这里的逻辑是每组(输出中的行)行号序列每 5 步递增 1。组中每个值所在的特定列取决于模数。