2017-02-20 125 views
1

我想在查询中传递一些变量,并需要在Spotfire等报表工具中使用结果集。teradata中的参数视图

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')为好。

我知道我们可以使用宏作为参数视图。但我们不能在选择部件/报告工具中使用该宏返回的结果集。

其他选项是创建没有过滤器的视图,然后在参数过滤器中使用该视图。

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中实现这一点?

+0

我正在修补一个使用strtok_split_to_table的方法,可能会工作,但它导致了我的系统crashdump ...所以我会建议反对。 – JNevill

回答

1

正如我在评论中提到的那样,我正在修补strtok_split_to_table作为将分隔列表值分成记录的解决方案,然后使用该源过滤查询。我为自己的努力得到了一次崩溃转储,但我想我会在这里分享我的想法,以防止导致崩溃的可能性降低。也许我遇到的任何问题在15.10中解决。

过滤领域f1在使用参数:q这是(逗号分隔值列表,直到它塞进一个视图这工作正常视图表test,因此,或许宏会表现得更好:

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 
    );