2017-06-15 123 views
1

大家好,非常感謝您花時間閱讀本文。MACRO在SQL中創建表格

我想在Teradata中創建一個宏,它將根據特定參數從另一個表中創建一個表。

我原來的表由三個patient_id,diagnosis_code和DATE_OF_BIRTH ......

我想建立一個宏,讓我到指定診斷代碼,然後它會建立表格包含所有患有該診斷代碼的患者的數據。

我當前的代碼看起來像這樣

Create Macro All_pats (diag char) as (
create table pats as(
select * 
from original_table 
where diag = :diagnosis_code;) 
with data primary index (patid); 

我似乎無法得到這個工作 - 任何提示?

再次感謝

回答

2

你的代碼中有一個錯誤的地方分號,而遺漏的閉架:

Create Macro All_pats (diag char) as (
    create table pats as 
    (
    select * 
    from original_table 
    where diag = :diagnosis_code 
    ) with data primary index (patid); 
); 

編輯:

傳遞多個值分隔列表比較複雜(除非您使用動態SQL存儲過程):

REPLACE MACRO All_lpats (diagnosis_codes VARCHAR(1000)) AS 
(
    CREATE TABLE pats AS 
    (
    SELECT * 
    FROM original_table AS t 
    JOIN TABLE (StrTok_Split_To_Table(1, :diagnosis_codes, ',') 
       RETURNS (outkey INTEGER, 
          tokennum INTEGER, 
          token VARCHAR(20) CHARACTER SET Unicode) 
       ) AS dt 
    ON t.diag = dt.token 
    ) WITH DATA PRIMARY INDEX (patid); 
); 

EXEC All_lpats('111,112,113'); 

顧名思義,StrTok_Split_To_Table將分隔字符串拆分爲表格。您可能需要修改分隔符和結果標記的長度。

+0

非常感謝您的回覆 - 您絕對已經釘上了它! 我可能會稍微痛苦一點,並要求跟進 我該如何修改這使我有多個診斷代碼 - 即我想創建一個診斷代碼爲111或112或113的表? 再次感謝您 – willepi

+0

@willepi:使用'StrTok_Split_To_Table'添加了一個示例。 – dnoeth