sql - SQL中的GBQ转置表
问题描述
试图在 GBQ 中转置一个表。该解决方案需要能够动态地处理不同的列和行。我知道有一种方法可以通过专门列出列来做到这一点,但是我有不同的表,其中包含大量的行。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 和动态旋转所需的所有参考
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`) || '''))
'''
);
推荐阅读
- java - Spring如何管理会话?
- c++ - Opencv,从图像中围绕对象绘制一个框
- mysql - 两个表中的 SQL 查询(1-M)
- webforms - 编译错误:CS1056:将 Asp.net 网络表单发布到 Godaddy 共享服务器时出现意外字符“$”
- python - Google API invalid_grant / bad_request
- android - 为什么我不能用 GeckoView 完全渲染 html?
- reactjs - 无法分配无渲染组件
- c# - 异步代码、共享变量、线程池线程和线程安全
- mongodb - 如何启动mongo v4.2.0
- bootstrap-4 - Bootstrap 4 水平列表组刷新