首页 > 解决方案 > BigQuery - 将多列连接成一列以获取大量列

问题描述

我的数据看起来像:

col1 col2 col3 ...
1 一个 无效的 ... 无效的
2 无效的 C ... D
3 无效的 无效的 无效的 ... 一个

我想将列浓缩在一起以获得:

最后
1 甲,乙
2 乙、丙、丁
3 一个

字母的顺序无关紧要,如果解决方案包含空值,例如。A,null,B,null 等。我可以研究如何稍后删除它们。我已经用完了 coln,因为我有大约 200 列要压缩。

我已经尝试了一些事情,如果我想压缩行,我可以使用 STRING_AGG()示例

另外我可以这样做:

SELECT 
CONCAT(col1,", ",col2,", ",col3,", ",coln) #ect.
 FROM mytable

但是,这将涉及手动写出每个列名,这是不可行的。有没有更好的方法可以理想地为整个桌子实现这一目标。

此外,如果任何值为 NULL,CONCAT 将返回 NULL。

标签: google-bigquery

解决方案


#standardSQL
select row, 
  (select string_agg(col, ', ' order by offset)
  from unnest(split(trim(format('%t', (select as struct t.* except(row))), '()'), ', ')) col with offset
  where not upper(col) = 'NULL'
  ) as final
from `project.dataset.table` t    

如果适用于您问题中的样本数据 - 输出是

在此处输入图像描述


推荐阅读