Google bigquery BigQuery标准SQL如何将行转换为列

Google bigquery BigQuery标准SQL如何将行转换为列,google-bigquery,Google Bigquery,我试图在BigQuery中使用新的标准SQL特性。但是,我无法在文档中找到有关如何执行以下操作的参考: 我的意见是: 我试图将其转换为以下内容: 我希望在SQL中使用PIVOT函数,但我无法在BigQuery标准SQL功能中找到创建PIVOT的方法 有没有办法做到这一点?这不是旋转,而是并集(逗号操作) 使用简单的联合 select B\B1 as B, 't1' as B, t1 as value, select B\B1 as B, 'm1' as B, m1 as value, sel

我试图在BigQuery中使用新的标准SQL特性。但是,我无法在文档中找到有关如何执行以下操作的参考:

我的意见是:

我试图将其转换为以下内容:

我希望在SQL中使用PIVOT函数,但我无法在BigQuery标准SQL功能中找到创建PIVOT的方法


有没有办法做到这一点?

这不是旋转,而是并集(逗号操作)

使用简单的联合

select B\B1 as B, 't1' as B, t1 as value,
select B\B1 as B, 'm1' as B, m1 as value,
select B\B1 as B, 'p1' as B, p1 as value;
请参见下面的选项

在这里,表中的行数并不重要,但列数才重要

您需要在temp named subquery下维护数组创建,方法是选择的列数与必须转置的列数相同。在下面的例子中,有三个是你的问题

对于这一部分,
无法避免手工工作
,而不是在您选择的客户机中进行编码-在构建下面的查询时加载表模式并循环执行,最后运行它。
再一次-这需要客户端编码,这看起来不像您在这里寻找的

那么,我们开始吧:

WITH temp AS (
  SELECT B, 
    ARRAY(
      SELECT AS STRUCT 't1' AS B1, t1 AS Value UNION ALL 
      SELECT AS STRUCT 'm1' AS B1, m1 AS Value UNION ALL 
      SELECT AS STRUCT 'p1' AS B1, p1 AS Value
    ) AS bb  
  FROM YourTable 
)
SELECT B, bb.B1 AS B1, bb.Value AS Value 
FROM temp t, t.bb  
你可以用它来测试

WITH YourTable AS (
  SELECT 'a' AS B,  1 AS t1,  2 AS m1,  3 AS p1 UNION ALL
  SELECT 'b' AS B,  4 AS t1,  5 AS m1,  6 AS p1 UNION ALL
  SELECT 'c' AS B,  7 AS t1,  8 AS m1,  9 AS p1 UNION ALL
  SELECT 'd' AS B, 10 AS t1, 11 AS m1, 12 AS p1 UNION ALL
  SELECT 'e' AS B, 13 AS t1, 14 AS m1, 15 AS p1 UNION ALL
  SELECT 'f' AS B, 16 AS t1, 17 AS m1, 18 AS p1 
),
temp AS (
  SELECT B, 
    ARRAY(
      SELECT AS STRUCT 't1' AS B1, t1 AS Value UNION ALL 
      SELECT AS STRUCT 'm1' AS B1, m1 AS Value UNION ALL 
      SELECT AS STRUCT 'p1' AS B1, p1 AS Value
    ) AS bb
  FROM YourTable 
)
SELECT B, bb.B1 AS B1, bb.Value AS Value 
FROM temp t, t.bb 

这是可行的,但是我提供的表是我必须这样做的表的简化版本。我有数百个B\B1s值,需要避免手动操作。数据库中没有语法为您编写SQL代码。您将需要使用一种编码语言来生成这种情况下的SQL语法。我担心我将不得不求助于此。谢谢你的帮助!我得到一个
语法错误:预期的关键字来自,但在[line]处得到了关键字选择。