2017-06-15 13 views
1

こんにちは皆さん、これを読んでいただきありがとうございます。MACROでSQLでテーブルを作成する

私は、特定のパラメータに基づいて別のテーブルからテーブルを作成するTeradataでマクロを作成したいと思います。私は私が診断コードを指定することができるようになると、それは、その後建設するマクロを構築したいと思います

私の元のテーブルには3つの列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

関連する問題