我的目标是减少查询长度。
对于每一列,我需要计算ntile()。查询如下
Select col1, n_tile over(order by col1),
col2, n_tile over(order by col2), ....
From main_table
这是我的尝试。
With columns as(
SELECT column_name
From information_schema.columns
Where table_name='main_table'),
n_tile_funcs as (
Select column_name, CONCAT('ntile(4) over (order by ', column_name, ' asc)') as ntilefunc
From columns),
query_tbl as (
Select CONCAT(ARRAY_JOIN(ARRAY_AGG(column_name), ',') ' ,' , ARRAY_JOIN(ARRAY_AGG(ntilefunc), ','))
From n_tile_funcs)
这成功地创建了必须在select语句中运行的东西,但是我无法找出一种方法来使用上面的结果作为select语句。例如
Select (select query from query_tbl)
From main_table
这只是输出main_table中行数的查询字符串。
如何运行查询从查询内的选择语句?
不能在生成动态查询的同一个查询中执行动态查询,句号。
SQL要求给定的语句在解析时是完整的,这是在它开始读取任何值或计算表达式之前。这意味着所有的语法和标识符必须是明确的和固定的。
如果您需要生成一个新的查询,您必须将其存储在一个变量中,并使用动态SQL来准备和执行它作为第二个操作。