BigQuery SQL语法错误FOR函数(“语法错误:预期的”)”,但在[7:18]处获得了关键字FOR)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BigQuery SQL语法错误FOR函数(“语法错误:预期的”)”,但在[7:18]处获得了关键字FOR)相关的知识,希望对你有一定的参考价值。

我需要基于dev_id将数据连接到一列(cont_url)中。我可以通过此查询在MS-SQL中成功完成此操作,但我需要在BigQuery中执行此操作。

select
    dev_id,
    stuff(
    (SELECT '|||' + cont_url
      FROM `test_table_sample`
        WHERE  dev_id = a.dev_id
         FOR XML PATH (''))                --Error is here
        , 1, 1, '') as testlist
from
    `test_table_sample` as a
group by
    dev_id

当我在Big Query中装入表并尝试运行相同的查询时,出现语法错误。

预期为“)”,但在[7:18]]中获得了关键字FOR

我不知道自己在做什么错,BigQuery标准SQL语法与T-SQL有什么不同。

我已经提供了示例数据表。

test_table_sample
dev_id  cont_url
Device1 Link1
Device1 Link2
Device1 Link3
Device1 Link4
Device2 anotherLink1
Device2 anotherLink2
Device2 anotherLink3
Device2 anotherLink4
Device2 anotherLink5

这里是查询的结果。

Results 
dev_id  cont_url
Device1 Link1|||Link2|||Link3|||Link4
Device2 anotherLink1|||anotherLink2|||anotherLink3|||anotherLink4|||anotherLink5

我需要基于dev_id将数据连接到一列(cont_url)中。我可以使用此查询在MS-SQL中成功完成此操作,但是我需要在BigQuery中执行此操作。选择dev_id,stuff(...

答案

BigQuery允许您仅聚合字符串。语法要简单得多:

select dev_id, string_agg(cont_url, '|||') as testlist
from `test_table_sample` as a
group by dev_id;
另一答案

我同意Gordon Linoff的观点,就更好地表示结果而言,最好使用array_agg()。

以上是关于BigQuery SQL语法错误FOR函数(“语法错误:预期的”)”,但在[7:18]处获得了关键字FOR)的主要内容,如果未能解决你的问题,请参考以下文章

SQL语法错误-CONCAT,控制台-BigQuery [关闭]

Google BigQuery 的 SQL 语法不存在

BigQuery 新的标准 SQL 语法是不是与“计数不同”完全一致?

BigQuery API:400 语法错误:预期关键字 JOIN 但得到“)”

BigQuery 中的函数名称区分大小写

php中for和SQL更新的正确语法是啥?