我正在尝试获取超过 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 中完成这项工作。任何帮助将不胜感激。谢谢