如何在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
相关产品推荐
相关产品推荐

