2017-02-20 14 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で作成)と非効率的な方法で私の意見をスキップすることがあります。このクエリはデモ目的のためのものです。実際のクエリはこれよりはるかに複雑です。

これを実現する方法はありますか?

+0

をIおそらく働いていたstrtok_split_to_tableを使った方法で微妙に変化していましたが、私のシステムにクラッシュダンプが発生したので、それに反対します。 – JNevill

答えて

1

コメントに記載されているように、私はstrtok_split_to_tableを値の区切りリストをレコードに分割し、そのソースを使用してクエリをフィルタリングする方法を工夫していました。私は努力のためにクラッシュダンプを持っていましたが、クラッシュが起こりにくいものにつながるように私の思考を共有すると思いました。おそらく、私が打つ問題は、15.10で解決されるでしょう。カンマ区切り値(それがビューに詰め込まれるまで、これが正常に動作しますので、おそらくマクロが良く振る舞うのリストであるパラメータ:q使用してビューでテーブルtest

フィルタリングフィールド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 
    );