How to Use the PIVOT Operator in Google BigQuery to Convert Rows to Columns for Better Data Analysis

How to Use the PIVOT Operator in Google BigQuery to Convert Rows to Columns for Better Data Analysis


3 min read

Implementing the PIVOT operator in Google BigQuery allows you to transform rows into columns, effectively reshaping your data for analysis that requires a more traditional spreadsheet-like view where each row represents a unique category and each column represents a metric or attribute for that category. This capability is particularly useful for generating reports, conducting comparison analyses, and preparing data for visualization. Here’s how to implement the PIVOT operator in Google BigQuery:

Basic Syntax

The PIVOT operator in BigQuery is used within a SELECT statement to pivot row values into columns based on the values of one or more columns. Here's the basic syntax:

FROM table_name
PIVOT (AGG_FUNC(column_to_aggregate) FOR pivot_column IN (pivot_value1 AS alias1, pivot_value2 AS alias2, ...))
  • table_name is the name of the table you're pivoting.

  • AGG_FUNC(column_to_aggregate) specifies the aggregation function (like SUM, AVG, COUNT) applied to the column you want to aggregate.

  • pivot_column is the column whose unique values will become the names of the new columns.

  • pivot_valueN AS aliasN specifies the values in the pivot column that you want to turn into column names, with optional aliases for each.

Example: Pivoting Sales Data

Suppose you have a sales data table (sales_data) with columns for product, month, and sales_amount. You want to pivot the data so that you have a column for each month showing sales amounts for each product.

Sample Data

product | month  | sales_amount
A       | Jan    | 1000
A       | Feb    | 1500
B       | Jan    | 2000
B       | Feb    | 2500

Pivot Query

FROM sales_data
  FOR month IN ('Jan' AS January, 'Feb' AS February)


product | January | February
A       | 1000    | 1500
B       | 2000    | 2500

Advanced Usage

  • Dynamic Pivoting: BigQuery does not directly support dynamic pivoting (i.e., automatically pivoting on all unique values without specifying them in the query). A workaround involves dynamic SQL where you construct a query string with all the pivot values dynamically identified from the data and then execute it.

  • Multiple Aggregations: You can pivot multiple columns simultaneously by including additional aggregation functions in the PIVOT clause.


  • Performance: Pivoting can be resource-intensive, especially on large datasets. Optimize your queries by filtering the data as much as possible before pivoting.

  • Data Modeling: While pivoting is powerful, consider if transforming data in this way is best done within the database or should be handled in your application or reporting layer, depending on the use case.

Pivoting data in BigQuery can dramatically enhance your ability to analyze and visualize data, especially when dealing with categorical data that benefits from a columnar representation for each category.