【发布时间】:2021-09-13 02:05:29
【问题描述】:
尝试转置 GBQ 中的表。该解决方案需要能够动态地处理不同的列和行。我知道有一种方法可以通过专门列出列来做到这一点,但是我有不同的表,其中包含大量的行。现在 GBQ 中有一个 unpivot 功能,我的想法是 Unpivot,然后 Pivot 它。不确定是否有人处理过这个问题?
起始数据
结果
【问题讨论】:
标签: sql google-bigquery pivot transpose unpivot
尝试转置 GBQ 中的表。该解决方案需要能够动态地处理不同的列和行。我知道有一种方法可以通过专门列出列来做到这一点,但是我有不同的表,其中包含大量的行。现在 GBQ 中有一个 unpivot 功能,我的想法是 Unpivot,然后 Pivot 它。不确定是否有人处理过这个问题?
起始数据
结果
【问题讨论】:
标签: sql google-bigquery pivot transpose unpivot
考虑以下方法
select * from (
select * from data
unpivot (value for Fruit in (Apple, Bananas, Orange))
)
pivot (max(value) for `Group` in ('North', 'South', 'West'))
如果应用于您问题中的样本数据 - 输出是
以下版本构建了 unpivot 和动态旋转所需的所有引用
execute immediate (select '''select * from (
select * from `project.dataset.table`
unpivot (value for Fruit in (''' || (select array_to_string(regexp_extract_all(to_json_string((select as struct * except(`Group`) from unnest([t]))), r'"([^"]+)":'), ', ')
from `project.dataset.table` t limit 1) || '''))
)
pivot (max(value) for `Group` in (''' || (select '"' || string_agg(distinct `Group`, '", "' order by `Group`) || '"' from `project.dataset.table`) || '''))
'''
);
【讨论】: