SAS 中MERGE BY 在DB2中如何翻译

本文介绍了SAS中的mergeby操作与DB2中的对应实现方法,包括使用FULL JOIN、LEFT JOIN及INNER JOIN等技术手段,实现了不同场景下表间数据的有效合并。

sas 中 merge by 的用法就不赘述了,需要的可以去自行查询;

这里主要讲述几种常见的merge by 在DB2中如何翻译

1,MERGE BY TAB1 TAB2 TAB3... ;

BY ID;

2,MERGE BY TAB1(IN = A) TAB2 ;

IF A = 1;

BY ID;

3,MERGE BY TAB1(IN = A) TAB2(IN = B);

BY ID;

IF A AND B THEN OUTPUT;

开始:

TAB1、TAB2、TAB3 的表结构如下:

TAB1 :

IDNAMESEXAGE
1001TOMF25
1002LYLIM21
1003LISAM20
1005ANNAM26

TAB2:

IDLANGUAGESCORE
1001CHN85
1001ENG76
1002CHN89
1004ENG90

TAB3:

IDLANGUAGE1SCORE1
1001CHN1185
1002ENG1176
1003CHN1189
1005ENG1190

第一种情况:

SAS代码:

data TABLEA;

merge TAB1 TAB2 TAB3 ;

by ID ;

run;

结果如下:

IDNAMESEXAGELANGUAGESCORELANGUAGE1SCORE1
1001TOMF25ENG76CHN1185
1001TOMF25CHN85CHN1185
1002LYLIM21CHN89ENG1176
1003LISAM20CHN1189
1004ENG90
1005ANNAM26ENG1190

通过观察SAS 的结果可以看出这里似乎可以用多个FULL JOIN 进行关联

SELECT NVL(A.ID,B.ID) AS ID,
       NAME,
       SEX,
       AGE,
       LANGUAGE,
       SCORE,
       LANGUAGE1,
       SCORE1
FROM (
       SELECT NVL(A.ID,B.ID) AS ID,
              NAME,
              SEX,
              AGE,
              LANGUAGE,
              SCORE
        FROM TAB1 A
        FULL JOIN ( SELECT ID,LANGUAGE,SCORE 
                    FROM TAB2 ) B
        ON A.ID = B.ID
) A
FULL JOIN
(SELECT ID,LANGUAGE1,SCORE1
 FROM TAB3 ) B
ON A.ID = B.ID

结果如下:

IDNAMESEXAGELANGUAGESCORELANGUAGE1SCORE1
1001TOMF25ENG76CHN1185
1001TOMF25CHN85CHN1185
1002LYLIM21CHN89ENG1176
1003LISAM20CHN1189
1004ENG90
1005ANNAM26ENG1190

结论:目前来看,这种情况可以用FULL JOIN来关联,其他情况还需要多测试。

第二种情况:

SAS代码:

data TABLEB;
merge TAB1 (in = a) TAB2;
if a = 1;
by id;
run;

结果如下:

IDNAMESEXAGELANGUAGESCORE
1001TOMF25CHN85
1001TOMF25ENG76
1002LYLIM21CHN89
1003LISAM20
1005ANNAM26

结论:目前来看,这种情况可以用 LEFT JOIN 来实现,通过BY 的字段来进行关联。

第三种情况:

SAS代码:

data TABLEC;
merge TAB1 (in = a ) TAB2 (in = b );
by ID;
run;

结果如下:

IDNAMESEXAGELANGUAGESCORE
1001TOMF25CHN85
1001TOMF25ENG76
1002LYLIM21CHN89

结论:目前来看,这种情况可以用 INNERJOIN 来实现,通过BY 的字段来进行关联。

结束!

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值