Отображает данные, разделенные на столбцы - PullRequest
0 голосов
/ 11 мая 2019

У меня есть список данных, и я хочу отображать их независимо от порядка, но по определенному порядку столбцов, например 3

id
1
2
3
4
5
6
7
8
9
10
11
12
13
14


id1 id2 id3
1   6   11
2   7   12
3   8   13
4   9   14
5   10  NULL

Окончательный результат

Ответы [ 2 ]

0 голосов
/ 11 мая 2019

Это сложно.Один подход использует два вызова 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;

enter image description here

Демо

0 голосов
/ 11 мая 2019

Вы можете использовать оконные функции и условное агрегирование:

select max(case when seqnum % 3 = 1 then id end),
       max(case when seqnum % 3 = 2 then id end),
       max(case when seqnum % 3 = 0 then id end)       
from (select t.*,
             row_number() over (order by (select null)) as seqnum
      from t
     ) t
group by (seqnum - 1) / 3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...