繁体   English   中英

使用 `string_agg` 在 BigQuery SQL 中创建一个包含另一个连接的唯一元素的新列

[英]Create a new column containing the concatenated unique elements of another in BigQuery SQL, using `string_agg`

给定以下数据:

WITH abc AS 
(
  SELECT 1234 id, 'Aug' month, 'P' value UNION ALL
  SELECT 1234, 'Sept', 'P' UNION ALL
  SELECT 4567, 'Sept', 'D' 
)
SELECT 
    month, 
    value, 
FROM abc

看起来像:

在此处输入图像描述

我想创建一个新列values ,其中包含value列中的所有值。

因此,对于此示例数据,新列将包含P, D

完成此操作后,output 将是(我刚刚用 Excel 将其写出来):

在此处输入图像描述

我尝试按如下方式执行此操作:

WITH abc AS 
(
    SELECT 1234 id, 'Aug' month, 'P' value 
    UNION ALL
    SELECT 1234, 'Sept', 'P' 
    UNION ALL
    SELECT 4567, 'Sept', 'D' 
)
SELECT 
    month, 
    value, 
    STRING_AGG(distinct value, " & ") as str_agg
FROM abc

但我收到此错误:

SELECT 列表表达式引用列月份,它既没有分组也没有聚合在 [7:5]

我不确定如何聚合/分组value列以满足此错误。

在下面使用

select * 
from abc, (
  select string_agg(distinct value, ', ') values
  from abc
)

如果应用于您问题中的示例数据 - output 是

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM