如何修复 bigquery 中动态 sql 的变量声明错误?

问题描述 投票:0回答:0

我正在尝试获取超过 50 列的列值总和,因此我在 bigquery 中的表中使用了动态 sql。我研究了动态 sql 语法并提出了这个解决方案。我的目标是在 6 个月内获得列值的总和,我有很多列需要做总和。

我在动态sql中的尝试

这是我在 bigquery 中尝试过的动态 sql:

DECLARE column_list ARRAY<STRING>;
SET column_list = [  'prod_ab_amt' ,
  'prod_bf_amt' ,
  'prod_gm_amt' ,
  'catg_cg_amt' ,
  'catg_dh_amt' ,
  'catg_xy_amt' ,
  'catg_mk_amt' ,
  'brand_hk_amt' ,
  'brand_hp_amt' ,
  'brand_vm_amt']

DECLARE query STRING;
SET query = (
  SELECT CONCAT(
    'SELECT user_id, extract(year from purchase_date) as purch_yr, ',
     ' CASE WHEN EXTRACT(MONTH FROM purchase_date) < 7 THEN 1 ELSE 2 END AS purch_half_period, ',
    STRING_AGG('SUM(', column, ') AS ', column),
    ' FROM trans',
    ' GROUP BY user_id, purch_yr, purch_half_period'
  )
  FROM UNNEST(column_list) AS column
);

EXECUTE IMMEDIATE query;

但是我收到了这个错误:

变量声明只允许在块的开头或 [13:1] 处的脚本

有人知道这个动态 sql 中真的有语法错误吗?有什么想法吗?

更新

输入表和值是模拟的。输入表的列也为可重现目的进行了最低限度的模拟。我认为使用动态 sql 是正确的做法,但现在以错误告终。谁能指出我如何使这个动态 sql 工作?

最少的数据

这里是我模拟实际输入表的最小数据:dbfiddle.

任何人都可以建议如何解决上述动态 sql 中的问题吗?我打算在 bigquery 标准 sql 中完成这项工作。任何帮助将不胜感激。谢谢

sql google-bigquery dynamic-sql
© www.soinside.com 2019 - 2024. All rights reserved.