SQL Pivot and Unpivot: Transforming Data Structures Efficiently

Efficiently transform data structures with SQL Pivot and Unpivot. Unlock techniques, syntax, and real-world examples for streamlined database management. Elevate your SQL skills now!

Kaibarta Sa

12/21/20231 min read

a stack of stacked blue and white plates
a stack of stacked blue and white plates

Understanding Pivot and Unpivot in SQL

SQL Pivot and Unpivot are powerful tools for transforming data structures, allowing for efficient manipulation of data. Let's dive into these concepts and explore their syntax and examples to better understand their functionality.


The PIVOT operation in SQL allows you to convert row-level data into a columnar format. It essentially rotates rows into columns, summarizing data and providing a clearer, more concise view.


Conversely, the UNPIVOT operation does the opposite. It transforms columns into rows, providing a more normalized and detailed view of the data.



The syntax for PIVOT generally looks like this:

SELECT * FROM ( SELECT column1, column2, column3 FROM your_table ) AS SourceTable PIVOT ( AGGREGATE_FUNCTION(column_to_pivot) FOR pivot_column IN (value1, value2, value3, ...) ) AS PivotTable;


The syntax for UNPIVOT typically follows this structure:

SELECT FROM ( SELECT FROM your_table ) AS SourceTable UNPIVOT ( value_column FOR unpivot_column IN (column1, column2, column3, ...) ) AS UnpivotTable;


Let's consider a scenario where you have a table containing sales data categorized by month and product category. Here's how you can use PIVOT and UNPIVOT to transform the data:

Sample Data:


Pivot Example:

SELECT * FROM ( SELECT Product_Category, January_Sales, February_Sales, March_Sales FROM SalesData ) AS SourceTable PIVOT ( SUM(January_Sales) FOR Month IN ([January], [February], [March]) ) AS PivotTable;

This query would pivot the data, summarizing sales by month and product category.

Unpivot Example:

SELECT Product_Category, Month, Sales FROM ( SELECT * FROM PivotTable ) AS SourceTable UNPIVOT ( Sales FOR Month IN ([January], [February], [March]) ) AS UnpivotTable;

This query would reverse the pivot operation, converting the columns back into rows.


SQL's PIVOT and UNPIVOT operations are incredibly useful for reshaping data, providing more meaningful insights and analysis. They allow for dynamic transformations of data structures, aiding in better decision-making and reporting within databases.