Mur*_*rta 2 sql pivot google-bigquery
今天 BigQuery 发布了一个新的很酷的函数PIVOT。
下面是它是如何工作的:
with Produce AS (
SELECT 'Kale' as product, 51 as sales, 'Q1' as quarter UNION ALL
SELECT 'Kale', 23, 'Q2' UNION ALL
SELECT 'Kale', 45, 'Q3' UNION ALL
SELECT 'Kale', 3, 'Q4' UNION ALL
SELECT 'Apple', 77, 'Q1' UNION ALL
SELECT 'Apple', 0, 'Q2' UNION ALL
SELECT 'Apple', 25, 'Q3' UNION ALL
SELECT 'Apple', 2, 'Q4')
SELECT * FROM
(SELECT * FROM Produce)
PIVOT(SUM(sales) FOR quarter IN ('Q1', 'Q2', 'Q3', 'Q4'))
+---------+----+----+----+----+
| product | Q1 | Q2 | Q3 | Q4 |
+---------+----+----+----+----+
| Apple | 77 | 0 | 25 | 2 |
| Kale | 51 | 23 | 45 | 3 |
+---------+----+----+----+----+
Run Code Online (Sandbox Code Playgroud)
我的问题是,在现实世界中,我们事先不知道季度值。
我尝试使用以下方法更动态地执行此操作:
SELECT * FROM
(SELECT * FROM Produce)
PIVOT(SUM(sales) FOR quarter in (select distinct quarter from Produce))
Run Code Online (Sandbox Code Playgroud)
没有成功。关于如何处理的任何线索?
这是reddit交叉帖子的链接
在下面使用 - 它动态构建枢轴列
execute immediate (
select '''select * from (select * from `project.dataset.Produce`)
pivot(sum(sales) for quarter in ("''' || string_agg(quarter, '", "') || '''"))
'''
from (select distinct quarter from `project.dataset.Produce` order by quarter)
);
Run Code Online (Sandbox Code Playgroud)