I have a table column like following
Name a b c d e f
Now I want to Divide this column into 3 columns like as
Name1 | Name2 | Name3 a | c | f b | d | e
How will the SQL Query for this?
Advertisement
Answer
On MySQL 8+, you could use ROW_NUMBER for this purpose:
WITH cte AS (
SELECT Name, ROW_NUMBER() OVER (ORDER BY Name) - 1 rn
FROM yourTable
)
SELECT
MAX(CASE WHEN FLOOR(rn / 2) = 0 THEN Name END) AS Name1,
MAX(CASE WHEN FLOOR(rn / 2) = 1 THEN Name END) AS Name1,
MAX(CASE WHEN FLOOR(rn / 2) = 2 THEN Name END) AS Name3
FROM cte
GROUP BY
rn % 2
ORDER BY
rn % 2;
This approach has an advantage over a union in that it can easily be extended to support more rows and columns as you need.
