多案例合并sql

时间:2014-02-04 15:41:00

标签: sql merge sas

我有两个数据集ab,每个数据集都包含cusip和ticker的字段。我要执行的 sql 会从a b设置if a.cusip=b.cusip列,但如果我找不到匹配的cusip,我会喜欢从b if a.ticker=b.ticker获取专栏。

有一种简单的方法可以执行此操作吗?我无法一次构建代码。

3 个答案:

答案 0 :(得分:2)

你需要两次加入你的B表,一次是在cusip上,一次是在自动收报机上。然后,您可以使用coalesce获取第一个非空值。

select
coalesce (b_cusip.column, b_ticker.column),
...

    from
    a
    left outer join b b_cusip
      on a.cusip = b_cusip.cusip
    left outer join b b_ticker
      on a.ticker = b_ticker.ticker

答案 1 :(得分:2)

内部联接和或在你的Clause条件应该在哪里工作。

Select *     from a 
inner join   b on a.cusip=b.cusip 
or           a.ticket = b.ticket;

答案 2 :(得分:1)

您可以尝试这样的事情:

data dataset_a;
input cusip ticker;
datalines;
1 111
2 222
3 333
5 555
;
run;
data dataset_b;
input cusip ticker value;
datalines;
1 111 10
20 222 25
30 333 40
4 444 55
;
run;

proc sql _method;
create table mydata as 
select 
a.*
,b.value
from dataset_a as a
left join dataset_b as b
on (case     
        when a.cusip=b.cusip then 1
        when a.ticker=b.ticker then 1
        else 0
    end)=1
;
quit;

返回:

cusip    ticker    value
1   111   10
2   222   25
3   333   40
5   555    .