Sql teradata中的参数视图

Sql teradata中的参数视图,sql,teradata,Sql,Teradata,我想在查询中传递一些变量,并需要在报告工具(如spotfire)中使用结果集 select prod_id,sum(sal) from cal c where qtr_num in (:q) group by 1 having sum(sal)>0; :q可以是单个值('Q1')或多个值('Q1'、'Q2'、'Q3'、'Q4') 我知道我们可以使用宏作为参数视图。但我们不能在select part/reporting tool中使用该宏返回的结果集 另一个选项是创建不带过滤器的视图,然后

我想在查询中传递一些变量,并需要在报告工具(如spotfire)中使用结果集

select prod_id,sum(sal)
from cal c
where qtr_num in (:q)
group by 1
having sum(sal)>0;
:q可以是单个值('Q1')或多个值('Q1'、'Q2'、'Q3'、'Q4')

我知道我们可以使用宏作为参数视图。但我们不能在select part/reporting tool中使用该宏返回的结果集

另一个选项是创建不带过滤器的视图,然后将该视图与参数过滤器一起使用

create view v 
as
(select prod_id,sum(sal)
from cal c
group by 1
having sum(sal)>0);

   select *
   from v
   where qtr_num in (:q);
但在我看来,这种方法可能会跳过分区访问(在qtr_num上创建)和低效的查询方式。此查询仅用于演示目的。实际查询要比这复杂得多


有没有办法在teradata中实现这一点

正如我在评论中提到的,我正在修补strtok_split_to_table作为一种解决方案,将带分隔符的值列表拆分为记录,然后使用该源过滤查询。由于我的努力,我得到了一个崩溃转储,但我想我会在这里分享我的想法,以防它有助于减少崩溃的可能性。也许我遇到的任何问题都会在15.10中得到解决

使用参数
:q
在视图中使用表
中的过滤字段
f1
,该参数是逗号分隔值的列表(在将其填充到视图中之前效果良好,因此宏的性能可能会更好:

CREATE VIEW test_view AS
SELECT * 
FROM test 
WHERE test.f1 in 
    (
        SELECT d.token 
        FROM TABLE 
            (
                strtok_split_to_Table(1, :q, ',') 
                RETURNS (outkey integer, tokennum integer, token varchar(20) character set unicode ) 
            ) d
    );

我正在修补一个使用strtok_split_to_表的方法,这个方法可能会起作用,但是它会在我的系统上造成崩溃…所以我建议不要这样做。