My table:
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;