sql - 根据一个变量的值有条件地组合多个数据集/表

标签 sql join merge sas

我看到了一些与我的问题相关的问题,但从来没有完全相同的结构,而且由于我对 SAS/SQL 很陌生,所以我找不到解决问题的正确方法。

我正在尝试几天来加入多个表(大约三十个)

基本上,我的问题归结为:

假设我有 3 张 table :

TAB,有 2 个变量 V1 和 V2 t1,有 2 个变量 V2 和 V3 t2,具有相同的 2 个变量 V2 和 V3

我想根据V2的值与t1或t2连接TAB以获得Full_TABLE

TAB
V1  V2
A   1
B   1
C   2
D   2

t1
V2  V3
1   x
1   y
1   z

t2
V2  V3
2   h
2   i
2   j

预期结果:

Full_TABLE
V1   V2   V3
A    1    x
A    1    y
A    1    z
B    1    x
B    1    y
B    1    z
C    2    h
C    2    i
C    2    j
D    2    h
D    2    i
D    2    j

从逻辑上讲,它是基于V2的值的条件连接:

  • 如果 V2=1 则将 TAB 与 t1 合并

  • 如果 V2=2 则将 TAB 与 t2 合并

不知道是否可以自动完成,

粗略地讲,V1 有 30.000 个不同的值,V2 有 27 个(因此 27 个表 t1-t27),V3 每个 V2 值有 10 个值,因此我预计 Full_TABLE 为 30.000*10=300.000 行

所以我可以管理基于 V2 和/或 V3 的半自动化解决方案,但不能管理 V1

任何 SAS 或 SQL(或 proc sql...)方面的线索都将受到高度赞赏!

最佳答案

您可以使用 proc sql 和一些 SQL 技巧来做到这一点:

proc sql;
    select tab.v1, tab.v2, coalesce(t1.v3, t2.v3) as v3
    from tab left join
         t1
         on tab.v2 = 1 left join
         t2
         on tab.v2 = 2;

关于sql - 根据一个变量的值有条件地组合多个数据集/表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33834510/

相关文章:

sql - 在第一个结果后更改排序标准

mysql - 字段等于零后返回默认值

Mysql根据用户ID加入表日志获取第二个最大日期限制1

sorting - 如何实现Sort Merge Bucketing Map Join?

python - Pandas 面试问题 - 比较 Pandas-Joins 并理想地提供最快的方法

SVN:如何通过接受传入添加(删除本地添加)来解决邪恶双胞胎树冲突

java - 获取 XML 包中返回的 SQLException 消息?

php - 如何只选择每个类别的一条记录?

mySQL 右外连接

MySQL SELECT 子查询