SQL 中的 GBQ 转置 Table

GBQ Transpose Table in SQL

正在尝试转置 GBQ 中的 table。该解决方案需要能够动态地处理不同的列和行。我知道有一种方法可以通过专门列出列来做到这一点,但我有不同的 tables 和大量的行。现在 GBQ 中有一个 unpivot 函数,我的想法是 Unpivot,然后 Pivot 它。不确定是否有人处理过这个问题?

起始数据

结果

考虑以下方法

select * from (
  select * from data
  unpivot (value for Fruit in (Apple, Bananas, Orange))
)
pivot (max(value) for `Group` in ('North', 'South', 'West'))         

如果应用于您问题中的示例数据 - 输出为

以下版本构建了 unpivot 和 pivot 动态动态所需的所有引用

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`) || '''))
'''
);