Преобразование таблицы MySQL из одного вертикального столбца в несколько горизонтальных столбцов - PullRequest
0 голосов
/ 14 мая 2019

Я хочу преобразовать эту таблицу

id | main_id       | image
1  | 10            | 52343.jpg   
2  | 10            | 52344.jpg  
3  | 10            | 52345.jpg 
4  | 11            | 52346.jpg   
5  | 11            | 52347.jpg  
6  | 11            | 52348.jpg 
7  | 11            | 52349.jpg   
8  | 12            | 52350.jpg  
9  | 12            | 52351.jpg

Чтобы быть таким:

id | main_id  | image1    | image2    | image3    | image4
1  | 10       | 52343.jpg | 52344.jpg | 52345.jpg |
2  | 11       | 52346.jpg | 52347.jpg | 52348.jpg | 52349.jpg 
3  | 12       | 52350.jpg | 52351.jpg |

Целевая таблица должна быть горизонтальной с отдельным столбцом для каждой записи.

1 Ответ

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

Если вы используете MySQL 8+, тогда мы можем использовать ROW_NUMBER здесь:

WITH cte AS (
    SELECT *, ROW_NUMBER() OVER (PARTITION BY main_id ORDER BY id) rn
    FROM yourTable
)

SELECT
    ROW_NUMBER() OVER (ORDER BY main_id) id,
    main_id,
    MAX(CASE WHEN rn = 1 THEN image END) AS image1,
    MAX(CASE WHEN rn = 2 THEN image END) AS image2,
    MAX(CASE WHEN rn = 3 THEN image END) AS image3,
    MAX(CASE WHEN rn = 4 THEN image END) AS image4
FROM cte
GROUP BY
    main_id;

enter image description here

Демо

...