Это сложно.Один подход использует два вызова ROW_NUMBER
, один для позиции строки, а другой для позиции столбца.Логика здесь заключается в том, что каждая строка принадлежит группе, которая переворачивается при увеличении id
на кратные 5, а столбец определяется тем, сколько кратных 5 представляет значение id
.
WITH cte AS (
SELECT id,
(ROW_NUMBER() OVER (ORDER BY id) - 1) / 5 AS rn1,
(ROW_NUMBER() OVER (ORDER BY id) - 1) % 5 AS rn2
FROM yourTable
)
SELECT
rn2,
MAX(CASE WHEN rn1 = 0 THEN id END) AS id1,
MAX(CASE WHEN rn1 = 1 THEN id END) AS id2,
MAX(CASE WHEN rn1 = 2 THEN id END) AS id3
FROM cte
GROUP BY
rn2
ORDER BY
rn2;
Демо