在BigQuery中,将一行转换为列可以使用UNPIVOT操作。但是,如果要动态地将行转换为列,则必须编写动态SQL查询。以下是一种可能的代码示例:
1.首先,您需要生成动态SELECT语句,以将每个行值转换为列。
WITH transform_cols_sql AS ( SELECT STRING_AGG( CONCAT( "MAX(CASE WHEN column_name='", REPLACE(column_name, "'", "''"), "' THEN column_value END) AS ", REPLACE(column_name, "'", "''") ), ", " ) AS sql, COUNT() AS num_cols FROM ( SELECT column_name, COUNT() as num_rows FROM your_table, UNNEST(REGEXP_EXTRACT_ALL(TO_JSON_STRING(your_table), r'"([^"]+?)":')) AS column_name WHERE column_name NOT IN ('$schema') GROUP BY 1 ) )
2.使用生成的SQL来将每行转换为列。
EXECUTE IMMEDIATE CONCAT( "SELECT ", transform_cols_sql.sql, " FROM your_table" )
这将使用生成的SQL动态地将行转换为列。请注意,此查询假设表中每个列具有相同的数据类型,并且在使用字符串连接函数STRING_AGG时对特殊字符进行了转义。