0
点赞
收藏
分享

微信扫一扫

SAS 中MERGE BY 在DB2中如何翻译

大沈投资笔记 2022-01-24 阅读 52
sasSQLdb2

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 的字段来进行关联。

结束!

举报

相关推荐

0 条评论