MACRO在SQL中创建一个表

时间:2017-06-15 18:53:58

标签: sql teradata

大家好,非常感谢您花时间阅读本文。

我想在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); 

我似乎无法让这个工作 - 任何提示?

再次感谢

1 个答案:

答案 0 :(得分:3)

您的代码在错误的地方有一个分号,并且缺少右括号:

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将分隔的字符串拆分为表格。您可能需要调整分隔符和结果标记的长度。

相关问题