BigQuery - 将多行连接成一行

Jai*_*son 6 google-bigquery

我有一个包含2列的BigQuery表:

id|name
1|John
1|Tom
1|Bob
2|Jack
2|Tim
Run Code Online (Sandbox Code Playgroud)

预期输出:按ID分组的连接名称

id|Text
1|John,Tom,Bob
2|Jack,Tim
Run Code Online (Sandbox Code Playgroud)

Mik*_*ant 14

对于BigQuery Standard SQL:

#standardSQL
--WITH yourTable AS (
--  SELECT 1 AS id, 'John' AS name UNION ALL
--  SELECT 1, 'Tom' UNION ALL
--  SELECT 1, 'Bob' UNION ALL
--  SELECT 2, 'Jack' UNION ALL
--  SELECT 2, 'Tim' 
--)
SELECT 
  id, 
  STRING_AGG(name ORDER BY name) AS Text 
FROM yourTable 
GROUP BY id
Run Code Online (Sandbox Code Playgroud)

可选ORDER BY name内部STRING_CONCAT允许您输出已排序的名称列表,如下所示

id  Text     
1   Bob,John,Tom     
2   Jack,Tim     
Run Code Online (Sandbox Code Playgroud)

对于旧版SQL

#legacySQL
SELECT 
  id, 
  GROUP_CONCAT(name) AS Text   
FROM yourTable
GROUP BY id  
Run Code Online (Sandbox Code Playgroud)

如果您需要在此处输出排序列表,您可以在下面使用(正式 - BigQuery Legacy SQL无法保证获得排序列表 - 但对于大多数实际情况,我有 - 它工作)

#legacySQL
SELECT 
  id, 
  GROUP_CONCAT(name) AS Text 
FROM (
  SELECT id, name 
  FROM yourTable 
  ORDER BY name
)
GROUP BY id  
Run Code Online (Sandbox Code Playgroud)