You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在BigQuery/PostgreSQL中实现Unpivot、Split Column与Pivot表转换?

源表转目标表的BigQuery/PostgreSQL实现方案

由于缺少源表和目标表的具体字段结构,以下基于Power Query中最常见的**宽表转窄表(逆透视列)和窄表转宽表(透视列)**场景给出通用解决方案,你可根据实际表结构调整。

一、宽表转窄表(Unpivot)

适用于将一行中多列指标拆分为多行单指标的场景,对应Power Query的「逆透视列」操作。

BigQuery 实现

通过UNNEST结合STRUCT批量拆分列:

-- 示例:源表sales包含date、product_a_sales、product_b_sales字段
SELECT
  date,
  metric_name,
  metric_value
FROM
  `your_project.your_dataset.sales`,
  UNNEST([
    STRUCT('product_a_sales' AS metric_name, product_a_sales AS metric_value),
    STRUCT('product_b_sales' AS metric_name, product_b_sales AS metric_value)
    -- 按需添加其他需要逆透视的列
  ])

PostgreSQL 实现

通过UNNEST结合数组拆分列:

-- 示例:源表sales包含date、product_a_sales、product_b_sales字段
SELECT
  s.date,
  u.metric_name,
  u.metric_value
FROM
  sales s,
  UNNEST(ARRAY[
    ('product_a_sales', s.product_a_sales),
    ('product_b_sales', s.product_b_sales)
    -- 按需添加其他需要逆透视的列
  ]) u(metric_name, metric_value)

二、窄表转宽表(Pivot)

适用于将多行单指标合并为一行多列的场景,对应Power Query的「透视列」操作。

BigQuery 实现

使用原生PIVOT关键字:

-- 示例:源表sales_details包含date、product_name、sales_value字段
SELECT
  *
FROM
  `your_project.your_dataset.sales_details`
PIVOT(
  SUM(sales_value) -- 根据需求选择聚合函数(SUM/AVG/MAX等)
  FOR product_name IN ('Product A', 'Product B') -- 指定需要转为列的字段值
)

PostgreSQL 实现

通过条件聚合模拟透视(PostgreSQL无原生PIVOT):

-- 示例:源表sales_details包含date、product_name、sales_value字段
SELECT
  date,
  SUM(CASE WHEN product_name = 'Product A' THEN sales_value ELSE 0 END) AS product_a_sales,
  SUM(CASE WHEN product_name = 'Product B' THEN sales_value ELSE 0 END) AS product_b_sales
  -- 按需添加其他需要透视的维度值
FROM
  sales_details
GROUP BY
  date

内容的提问来源于stack exchange,提问作者Deryansyah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 07:31:18