SQL中的条件联接取决于列值

SQL中的条件联接取决于列值,sql,proc-sql,Sql,Proc Sql,我正在尝试使用PROC-SQL在SAS表上进行连接。根据表A中一个变量的值,我需要使用一列进行联接,否则我需要使用另一列 proc sql; create table test as select A.*, A.PPNG_RVNE * B.perc_ress as variable1, A.P_RVNE * B.perc_ress as variable2 from tableA as A left join tableB as B on case when A.co

我正在尝试使用PROC-SQL在SAS表上进行连接。根据表A中一个变量的值,我需要使用一列进行联接,否则我需要使用另一列

proc sql;
create table test
as select
A.*,
A.PPNG_RVNE * B.perc_ress as variable1,
A.P_RVNE    * B.perc_ress as variable2
from      tableA    as A
left join tableB    as B
on case when A.cod_cia = 1 then A.cod_cia=B.cod_cia and A.cod_agrup_produto=B.cod_agrup_produto 
                           else A.cod_cia=B.cod_cia and A.projeto=B.projeto;
我需要加入来创建variable1和variable2。我不想从表B中选择任何变量

我的鳕鱼不跑了。SAS向我发送了一条错误消息,表示它正在等待“结束”


有人知道如何根据列进行条件联接吗?

不是PROC-SQL用户,因此,如果这是错误的,则表示歉意,但基于case语句,需要以下格式:

CASE
    WHEN ... THEN ...
    WHEN ... THEN ...
    ELSE ...
END
那么你有没有试过:

proc sql;
create table test
as select
A.*,
A.PPNG_RVNE * B.perc_ress as variable1,
A.P_RVNE    * B.perc_ress as variable2
from      tableA    as A
left join tableB    as B
on case when A.cod_cia = 1 then A.cod_cia=B.cod_cia and A.cod_agrup_produto=B.cod_agrup_produto 
        else A.cod_cia=B.cod_cia and A.projeto=B.projeto
   end;

不要使用
案例
。只需用布尔语言表达逻辑”

proc-sql;
将表测试创建为
选择A.*,A.PPNG_RVNE*B.perc_press作为变量1,A.P_RVNE*B.perc_press作为变量2
从表A左连接
表B
关于A.cod_cia=B.cod_cia和
(A.cod\u cia=1和A.cod\u agrup\u produto=B.cod\u agrup\u produto)或
(A.cod_cia 1和A.projeto=B.projeto);

注意:这使用了
1
。如果
cod\u cia
可能是
NULL
,您需要考虑到这一点。还请注意,这会排除第一个条件。

我将使用两个连接和一个合并语句:

proc sql;
create table test
as select
A.*,
A.PPNG_RVNE * coalesce(B1.perc_ress,B2.perc_ress) as variable1,
A.P_RVNE    * coalesce(B1.perc_ress,B2.perc_ress) as variable2
from      tableA    as A
left join tableB    as B1
    on A.cod_cia = 1 and A.cod_cia=B1.cod_cia and A.cod_agrup_produto=B1.cod_agrup_produto
left join tableB    as B2
    on  A.cod_cia=B2.cod_cia and A.projeto=B2.projeto;

您可以在第二个联接中添加A.cod_cia ne 1,但除非您尝试添加END,否则没有必要这样做。

那么您是否尝试添加END?CASE语句总是需要END。
proc sql;
create table test
as select
A.*,
A.PPNG_RVNE * coalesce(B1.perc_ress,B2.perc_ress) as variable1,
A.P_RVNE    * coalesce(B1.perc_ress,B2.perc_ress) as variable2
from      tableA    as A
left join tableB    as B1
    on A.cod_cia = 1 and A.cod_cia=B1.cod_cia and A.cod_agrup_produto=B1.cod_agrup_produto
left join tableB    as B2
    on  A.cod_cia=B2.cod_cia and A.projeto=B2.projeto;