我有两个数据集a
和b
,每个数据集都包含cusip和ticker的字段。我要执行的 sql 会从a
b
设置if a.cusip=b.cusip
列,但如果我找不到匹配的cusip,我会喜欢从b
if a.ticker=b.ticker
获取专栏。
有一种简单的方法可以执行此操作吗?我无法一次构建代码。
答案 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 .