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

如何在BigQuery中通过分组将列转行并添加类型字段

解决方案

由于你未提供源表和目标表的具体结构,我基于SQL表结构转换的常见场景给出针对性方案,你可以根据实际表结构调整:

场景1:将同一分组的多字段拆分为「attribution/immediate」类型行

假设源表(source_table)结构为:

CREATE TABLE source_table (
    group_id INT,
    attribution_val DECIMAL(10,2),
    immediate_val DECIMAL(10,2)
);

目标表需要把每个分组的两个数值字段拆分为两行,新增type字段标记类型。可以用UNION ALL实现行转列:

SELECT 
    group_id,
    'attribution' AS type,
    attribution_val AS value
FROM source_table
UNION ALL
SELECT 
    group_id,
    'immediate' AS type,
    immediate_val AS value
FROM source_table
ORDER BY group_id, type;

场景2:基于分组统计生成「attribution/immediate」类型

如果源表是流水数据,需要按分组计算累计值(attribution)和当期值(immediate):
假设源表(source_table)结构为:

CREATE TABLE source_table (
    group_id INT,
    record_date DATE,
    amount DECIMAL(10,2)
);

目标表需要每个分组、每个日期对应两条记录:当期金额(immediate)和累计金额(attribution)。用窗口函数+UNION ALL实现:

WITH group_calc AS (
    SELECT 
        group_id,
        record_date,
        amount AS immediate_amount,
        SUM(amount) OVER (PARTITION BY group_id ORDER BY record_date) AS attribution_amount
    FROM source_table
)
SELECT 
    group_id,
    record_date,
    'immediate' AS type,
    immediate_amount AS value
FROM group_calc
UNION ALL
SELECT 
    group_id,
    record_date,
    'attribution' AS type,
    attribution_amount AS value
FROM group_calc
ORDER BY group_id, record_date, type;

场景3:分组类型直接映射为「attribution/immediate」

如果源表已有分组类型字段,只需将其映射为目标类型:

SELECT 
    -- 保留原表其他字段
    id,
    other_column,
    CASE 
        WHEN group_type = '累计归属' THEN 'attribution'
        WHEN group_type = '即时数值' THEN 'immediate'
        ELSE 'unknown'
    END AS type,
    value
FROM source_table;

如果你的表结构和上述场景不符,补充源表、目标表的具体字段和数据示例,可进一步调整方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 04:50:24