首页 >数据库 >mysql教程 >如何在 BigQuery 中将行转置为列?

如何在 BigQuery 中将行转置为列?

Mary-Kate Olsen
Mary-Kate Olsen原创
2025-01-05 18:33:43462浏览

How to Transpose Rows into Columns in BigQuery?

在 BigQuery 中将行转置为列:透视实现

将行转置为列(也称为透视),允许您将键值对转换为新表其中键成为列名称,值放置在相应的单元格中。虽然 BigQuery 本身不支持旋转函数,但您仍然可以使用简单的方法来实现此目的。

输入表结构

首先,请确保您的输入表具有以下列:

  • Key:指定每个类别的列row.
  • Value:与键对应的值。

此外,您将需要一个列来将应合并为单个行的行分组输出中的行。

第 1 步:将输入数据转换为转置查询字符串

中第 1 步,我们将创建一个查询字符串,执行时将生成转置查询。执行以下查询:

SELECT 'SELECT id, ' + 
   GROUP_CONCAT_UNQUOTED(
      'MAX(IF(key = "' + key + '", value, NULL)) as [' + key + ']'
   ) 
   + ' FROM yourTable GROUP BY id ORDER BY id'
FROM (
  SELECT key 
  FROM yourTable
  GROUP BY key
  ORDER BY key
) 

步骤 2:执行转置查询

复制步骤 1 的结果并将其作为常规查询执行。这将生成一个包含转置数据的表:

SELECT 
  id, 
  MAX(IF(key = "channel_id", value, NULL)) AS [channel_id],
  MAX(IF(key = "channel_title", value, NULL)) AS [channel_title],
  MAX(IF(key = "examId", value, NULL)) AS [examId],
  MAX(IF(key = "postId", value, NULL)) AS [postId],
  MAX(IF(key = "youtube_id", value, NULL)) AS [youtube_id] 
FROM yourTable 
GROUP BY id 
ORDER BY id

生成的表将具有以下结构:

id channel_id channel_title examId postId youtube_id
1 UCiDKcjKocimAO1tV Mahendra Guru 72975611-4a5e-11e5 1189e340-b08f ugEGMG4-MdA
2 UCODeKM_D6JLf8jJt Ab Live 72975611-4a5e-11e5 0c3e6590-afeb 3TNbtTwLY0U

注意

如果您的表有一个很大的列数,您可以通过手动构建转置查询来跳过步骤 1。然而,第 1 步提供了一种快速便捷的方法来动态生成查询。

以上是如何在 BigQuery 中将行转置为列?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn