SQL Query

PostgreSQL: SQL Pivot Table Query

PostgreSQL guide: Transform rows to columns using CASE WHEN or PIVOT operator.

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.

Related Content

From Our Blog

Try it yourself

Practice this query in our interactive SQL sandbox.