2017-02-20 126 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 
    );