【问题标题】:parameter view in teradatateradata 中的参数视图
【发布时间】:2017-02-21 04:18:43
【问题描述】:

我想在查询中传递一些变量,并且需要在像 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')。

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

其他选项是创建不带过滤器的视图,然后使用带有参数过滤器的视图。

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 的方法,该方法可能会奏效,但它导致我的系统出现故障转储......所以我建议不要这样做。

标签: sql teradata


【解决方案1】:

正如我在 cmets 中提到的,我正在修补 strtok_split_to_table 作为将分隔的值列表拆分为记录的解决方案,然后使用该源过滤查询。我的努力得到了一个崩溃转储,但我想我会在这里分享我的想法,以防它有助于导致不太容易发生崩溃的事情。也许我遇到的任何问题都在 15.10 中得到解决。

使用参数:q 在视图中过滤表test 中的字段f1,参数:q 是逗号分隔值的列表(这工作正常,直到它被塞进视图中,所以也许宏会表现得更好:

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

【讨论】:

    猜你喜欢
    • 2019-12-19
    • 2014-11-12
    • 2021-11-12
    • 1970-01-01
    • 2016-08-01
    • 1970-01-01
    • 2011-04-30
    • 2019-10-26
    • 2020-05-22
    相关资源
    最近更新 更多