Sql 如何在BigQuery中取消Pivot?

Sql 如何在BigQuery中取消Pivot?,sql,google-bigquery,transpose,unpivot,Sql,Google Bigquery,Transpose,Unpivot,不确定调用什么函数,但转置是我能想到的最接近的事情 我在BigQuery中有一个表,配置如下: 但我想查询如下配置的表: 创建此表的SQL代码是什么样子的 谢谢 2020年更新:fhoff.x.unpivot 见: 我创建了一个公共持久UDF。如果您有一个表a,您可以将整行交给UDF,以使其不被分割: SELECT geo_type, region, transportation_type, unpivotted FROM `fh-bigquery.public_dump.applemobil

不确定调用什么函数,但转置是我能想到的最接近的事情

我在BigQuery中有一个表,配置如下:

但我想查询如下配置的表:

创建此表的SQL代码是什么样子的

谢谢

2020年更新:fhoff.x.unpivot

见:

我创建了一个公共持久UDF。如果您有一个表a,您可以将整行交给UDF,以使其不被分割:

SELECT geo_type, region, transportation_type, unpivotted
FROM `fh-bigquery.public_dump.applemobilitytrends_20200414` a
  , UNNEST(fhoffa.x.unpivot(a, '_2020')) unpivotted
它可以像这样变换表:

进入这个

正如评论所提到的,我上面的解决方案并不能解决这个问题

这里有一个变体,我来看看如何将所有内容整合为一个:

创建临时函数unpivotx任意类型,如下所示 选择 数组集合结构 REGEXP_提取“[^]+”作为键 ,REGEXP_EXTRACTy,':[0-9]+'作为值 从最不安 选择REGEXP_EXTRACT_ALLjson,“[smlx][meaxl]”| | r'[^::+:\?[^]+?'arr 从选择到_JSON_STRINGx JSON y ; 选择位置,取消定位* 来自“robotic-charmer-726.bl_测试数据.重新配置_a_表”`x ,unnestupivotx unpivotted 先前的答复:

在BigQuery中使用带“,”的表的并集,加上一些列别名:

SELECT Location, Size, Quantity
FROM (
  SELECT Location, 'Small' as Size, Small as Quantity FROM [table]
), (
  SELECT Location, 'Medium' as Size, Medium as Quantity FROM [table]
), (
  SELECT Location, 'Large' as Size, Large as Quantity FROM [table]
)

@Felipe,我尝试使用标准sql,但在查询的第一行出现了一个错误,它说:列名位置在[1:8]处不明确

我使用了一个对我有效的替代查询:

SELECT Location, 'Small' as Size, Small as Quantity FROM `table`
UNION ALL
SELECT Location, 'Medium' as Size, Medium as Quantity FROM `table`
UNION ALL
SELECT Location, 'Large' as Size, Large as Quantity FROM `table`

我有一个使用结构、数组和交叉连接+UNNEST的解决方案:

完整解释和说明:

更新2021:

BigQuery中引入了一个新的运算符

在使用UNPIVOT将第一季度、第二季度、第三季度和第四季度旋转为销售和季度列之前:

产品 Q1 问题2 第三季度 第四季度 甘蓝 51 23 45 3. 苹果 77 0 25 2.
感谢您对@FelipeHoffa!的快速而有益的回复!!它不需要第二个和第三个“FROM”。所以最后它是这样工作的:'选择位置,大小,从选择位置的数量,'小'作为大小,从[表]的数量小,'中'作为大小,从[表]的数量中等,'选择位置,'大'作为大小,从[表]的数量大'谢谢!正当查询修复如果你上传样本数据到BQ,那么我可以测试我的查询,然后再粘贴到这里好知道!如何指向我的BigQuery数据集?我目前只使用Tableau和BigQueryWebUI进行查询,所以我不知道如何向某人指示我的数据集。谢谢如果您将数据集公开,那么StackOverflow上的任何人都可以查看它并伸出援手:。例如,这是我8月份的wikipedia页面浏览日志:project:dataset.table感谢您的2020更新祝贺。只是警告一下,只要列本身没有嵌套在结构中,这种方法就行。在这里,关键值开始执行有线操作。尽管如此,它的实施还是一个巨大的灵感来源。再次感谢。为什么投票被否决了?我可以这样解决我的问题。
WITH
  My_Table_Metrics_Data AS (
  SELECT
    ...,
    [
        STRUCT('...' AS Metric, ... AS Data),
        STRUCT('...' AS Metric, ... AS Data),
    ] AS Metrics_Data
  FROM
    `My_Dataset.My_Table`
  WHERE
    ...
  )
SELECT
  ...,
  Metric_Data
FROM
  My_Table_Metrics_Data
CROSS JOIN
  UNNEST(My_Table_Metrics_Data.Metrics_Data) AS Metric_Data