My table:
x
id val
--------
a 1
a 2
a 3
b 7
b 8
b 9
b 10
What i want to get is:
id val1 val2 val3 val4
--------------------------
a 1 2 3 null
b 7 8 9 10
Is there any simple way for this?
Advertisement
Answer
If you are using MySQL 8+, then ROW_NUMBER
combined with pivoting logic provides one way:
WITH cte AS (
SELECT *, ROW_NUMBER() OVER (PARTITION BY id ORDER BY val) rn
FROM yourTable
)
SELECT
id,
MAX(CASE WHEN rn = 1 THEN val END) AS val1,
MAX(CASE WHEN rn = 2 THEN val END) AS val2,
MAX(CASE WHEN rn = 3 THEN val END) AS val3,
MAX(CASE WHEN rn = 4 THEN val END) AS val4
FROM cte
GROUP BY
id;