MySQL – Rows to Columns Conversion

In this post, we will learn how to convert Rows to columns and columns into row which we can do using transpose where each row is restored as a column for the same we have given an example where we have transposed the table.

Rows

Rows To Column Conversion

Let’s take an example of the given table that we need to transpose in MySQL.

date	    product	sales
2022-01-01	A	100
2022-01-02	A	200
2022-01-01	B	150
2022-01-02	B	250

For the same we can use the code given below to display the data as it was originally.

SELECT
  date,
  SUM( CASE WHEN product = 'A' THEN sales ELSE 0 END) AS 'A',
  SUM( CASE WHEN product = 'B' THEN sales ELSE 0 END) AS 'B'
FROM sales
GROUP BY date;

And when we convert the row into column, the columns will become the row Which will look like.

date     	A	B
2022-01-01	100	150
2022-01-02	200	250

We can also use different functions to get our work done as a group concat, And an example of this has being below.

SELECT
  date,
  GROUP_CONCAT( CASE WHEN product = 'A' THEN sales ELSE NULL END) AS 'A',
  GROUP_CONCAT( CASE WHEN product = 'B' THEN sales ELSE NULL END) AS 'B'
FROM sales
GROUP BY date;

So the example we have taken can be used for converting or transposing with a drawback as it would not be used for null values. We can change this behaviour by specifying a separator and using the concar was function which we have used below as an example and a pseudo code is given below.

SELECT
  date,
  CONCAT_WS(',', GROUP_CONCAT(CASE WHEN product = 'A' THEN sales ELSE NULL END)) AS 'A',
  CONCAT_WS(',', GROUP_CONCAT(CASE WHEN product = 'B' THEN sales ELSE NULL END)) AS 'B'
FROM sales
GROUP BY date;

As per the code given above the table will look like as given above after transposing the table.

As there is always another way to do the same thing here we can do the same thing using another function which is the pivot operator, Although PIVOT is not supported in MYSQL we can achieve it using different other functions which help us in getting the table transpose.

For the same, we have given an example to implement and get it done in MySQL.

Take an example of the same, same table where we need to transpose the table as per given nomes as row should be converted as columns and column as row. For the same look at the example given below.

SELECT customer_id,
       SUM( CASE WHEN MONTH(order_date) = 1 THEN order_amount ELSE 0 END) AS 'January',
       SUM( CASE WHEN MONTH(order_date) = 2 THEN order_amount ELSE 0 END) AS 'February'
FROM orders
GROUP BY customer_id;

 

To learn more about MySQL – Row to Column Conversion: by stack over flow Mysql Tables.

To learn more about MySQL tutorials, and solutions to problems faced in MySQL along with Concepts visit MySQL Tutorials And Problems.

 

 

Leave a Comment

%d bloggers like this: