MySQL: Transpose Rows to Columns
Robert Cooper
Robert Cooper Senior Engineer at Basedash
· January 31, 2025
Robert Cooper
Robert Cooper Senior Engineer at Basedash
· January 31, 2025
Transposing rows to columns in MySQL involves reshaping data so that rows become columns, often for improved readability and data analysis. This guide explains how to achieve this using SQL queries, focusing on the use of conditional aggregation and the CASE statement.
Transposing data means converting rows into columns, creating a pivot table effect. This operation is useful when you want to compare data across different rows in a more horizontal format.
Consider a simple dataset in a table sales_data:
CREATE TABLE sales_data (
year INT,
product VARCHAR(50),
sales INT
);
One common approach to transposing rows to columns in MySQL is using the CASE statement with GROUP BY. This method works well for known and limited distinct values.
Here’s how to transpose sales data for different products into separate columns:
SELECT
year,
SUM(CASE WHEN product = 'Product A' THEN sales ELSE 0 END) AS ProductA_sales,
SUM(CASE WHEN product = 'Product B' THEN sales ELSE 0 END) AS ProductB_sales
FROM
sales_data
GROUP BY
year;
For dynamic column generation based on unknown or numerous distinct values, a more complex approach involving prepared statements is required.
Dynamic transposing is a two-step process: first, dynamically creating a list of columns; second, constructing a query using this list.
Extract distinct values to be used as column names:
SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
'SUM(CASE WHEN product = ''',
product,
''' THEN sales ELSE 0 END) AS ',
CONCAT('`',product,'_sales`')
)
) INTO @sql
FROM
sales_data;
Construct and execute a dynamic query with the generated column list:
SET @sql = CONCAT('SELECT year, ', @sql, ' FROM sales_data GROUP BY year');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
If this query pattern is part of recurring reporting, Basedash helps you turn it into reusable, AI-native BI workflows: prompt-to-SQL, shared dashboards, and trusted answers that stay aligned with your data model.
Written by
Senior Engineer at Basedash
Robert Cooper is a senior engineer at Basedash who builds full-stack product systems across SQL data infrastructure, APIs, and frontend architecture. His work focuses on application performance, developer velocity, and reliable self-hosted workflows that make data operations easier for teams at scale.
Basedash lets you build charts, dashboards, and reports in seconds using all your data.