This guide is specifically for PostgreSQL syntax.
SQL Pivot Table Query
Transform rows to columns using CASE WHEN or PIVOT operator.
Quick Answer
SELECT product, SUM(CASE WHEN month='Jan' THEN sales END) as jan FROM sales GROUP BY product;
Explanation
CASE WHEN inside aggregates creates pivot-like output. SQL Server has native PIVOT syntax. Group by the row identifier column.
Query Variants
Case When
SELECT product, SUM(CASE WHEN quarter = 'Q1' THEN revenue ELSE 0 END) as Q1, SUM(CASE WHEN quarter = 'Q2' THEN revenue ELSE 0 END) as Q2, SUM(CASE WHEN quarter = 'Q3' THEN revenue ELSE 0 END) as Q3, SUM(CASE WHEN quarter = 'Q4' THEN revenue ELSE 0 END) as Q4 FROM sales GROUP BY product;
Sqlserver Pivot
SELECT * FROM (SELECT product, quarter, revenue FROM sales) src PIVOT (SUM(revenue) FOR quarter IN ([Q1], [Q2], [Q3], [Q4])) pvt;
Pro Tips
- CASE WHEN works in all databases
- PIVOT is SQL Server specific
- Dynamic pivots require dynamic SQL
Related SQL Queries
Continue learning with more SQL query examples:
PostgreSQL-Specific Notes
This page covers PostgreSQL syntax. Other databases may have different syntax for similar operations.