我要转换该表
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 |
目标表必须是水平的,并且每个记录都有单独的列。
答案 0 :(得分:0)
如果您使用的是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;