是否可以使用BigQuery在一个查询中执行以下数据透视,或者我是否需要将其分解为多个查询?
以下是原始数据:
这是数据透视表:
有没有办法在BigQuery中构建一个任意嵌套的数据透视表?或者每个级别是否需要自己的SQL查询?
注意,在上文中,为6个列组合中的每一个(CA-M,CA-F,FR-M,FR-F,US-M,...做CASE WHEN
语句很简单。 US-F),但是为了一般情况,我们假设可能有数百个国家,因此将每个组合手动编写为不同的CASE
语句是不切实际的。
答案 0 :(得分:4)
以下是我心目中最优化的选项
第1步 - 根据您的数据准备查询
<a>
步骤2 - 获取步骤1的结果文本并将其作为查询运行 结果将如您所愿(参见下面的示例)
#standardSQL
WITH country_sex_list AS (
SELECT Country, Sex
FROM yourTable
GROUP BY Country, Sex
),
permutations AS (
SELECT
STRING_AGG(CONCAT("SUM(CASE WHEN (Country, Sex) = ('", Country, "', '", Sex, "') THEN Income END) AS ", Country, "_", Sex), ',' ORDER BY Country, Sex) AS text
FROM country_sex_list
)
SELECT
CONCAT(
"SELECT company, ", text, ", SUM(Income) AS Total FROM yourTable GROUP BY Company UNION ALL ",
"SELECT 'Total' as company, ", text, ", SUM(Income) AS Total FROM yourTable"
) AS query
FROM permutations
我认为这两个步骤足够通用,可以扩展到实际用例
当然,您可以在Web UI中手动运行这两个步骤,也可以在您选择的client中编写脚本
下面是要用
进行测试的虚拟数据company CA_M FR_F FR_M US_F US_M Total
Acme null 40,000 null null 40,000 80,000
Bravo 50,000 null null 30,000 null 80,000
Delta null null 40,000 null null 40,000
Total 50,000 40,000 40,000 30,000 40,000 200,000