Sql 如何进行完整的外部连接,无论它们是否匹配,都将使用它们的连接条件填充
我有两张桌子,我正在做一个完整的外部连接。它们在变量accsnnum上联接,它们都共享该变量。但我有个问题。accsnnum只在两个集合中都存在时才打印出来,但我需要它打印出来,不管它是否同时存在,因为我正在比较按accsnum分组的变量的计数 为了举例说明,我有一个类似这样的labtable,只有这两个变量:Sql 如何进行完整的外部连接,无论它们是否匹配,都将使用它们的连接条件填充,sql,join,sas,full-outer-join,Sql,Join,Sas,Full Outer Join,我有两张桌子,我正在做一个完整的外部连接。它们在变量accsnnum上联接,它们都共享该变量。但我有个问题。accsnnum只在两个集合中都存在时才打印出来,但我需要它打印出来,不管它是否同时存在,因为我正在比较按accsnum分组的变量的计数 为了举例说明,我有一个类似这样的labtable,只有这两个变量: accsnum lab_lbcount A12 3 A11 5 A14 7 A13 5 accsnu
accsnum lab_lbcount
A12 3
A11 5
A14 7
A13 5
accsnum rslt_lbcount
A15 5
A12 2
A14 7
A16 3
一个rslttable,看起来像这样,只有这两个变量:
accsnum lab_lbcount
A12 3
A11 5
A14 7
A13 5
accsnum rslt_lbcount
A15 5
A12 2
A14 7
A16 3
我使用以下代码将这两者结合起来:
proc sql;
create table both as
select Labtable.accsnnum label="Lab_accsnnum", Rslttable.accsnnum
label="Rslt_accsnnum", Labtable.Lab_lbcount label="Lab_lbtestcd_count",
Rslttable.Rslt_lbcount label="Rslt_lbtestcd_count",
Lab_lbcount-Rslt_lbcount as difference
from work.Labtable
full outer join work.Rslttable
on Labtable.accsnnum = Rslttable.accsnnum;
quit;
这将生成下表:
accsnum lab_lbcount rslt_lbcount difference
5 . .
A12 3 2 1
5 . .
A14 7 7 0
. 5 .
. 3 .
请注意,它仅打印两个表连接处的AccsUM,但包括lb_计数和rslt_计数。我需要让它打印出该变量中的accsnum,即使它不同时在两个表中,或者我需要找到一种方法通过accsnum进行连接,但仍然打印出两个表中每个表的accsum。基本上,我希望输出像这样:
accsnum lab_lbcount rslt_lbcount difference
A11 5 . .
A12 3 2 1
A13 5 . .
A14 7 7 0
A15 . 5 .
A16 . 3 .
或者像这样的事情也可以:
accsnum lab_accsum rslt_accsum lab_lbcount rslt_lbcount difference
A11 . 5 . .
A12 A12 A12 3 2 1
A13 . 5 . .
A14 A14 A14 7 7 0
. A15 . 5 .
. A16 . 3 .
非常感谢您的帮助
编辑:我正在SAS环境中编写SQL代码,以防不清楚。但这应该与准则没有多大关系。再次感谢 合并这两个事件。此函数接受第一个非缺失值,因此如果labtable.accsnnum可用,则接受该值;否则将采用rslttable.accsnnum
proc sql;
create table both as
select coalesce(labtable.accsnnum,rslttable.accsnnum) as accsnnum label="Access Number", Labtable.Lab_lbcount label="Lab_lbtestcd_count",
Rslttable.Rslt_lbcount label="Rslt_lbtestcd_count",
Lab_lbcount-Rslt_lbcount as difference
from work.Labtable
full outer join work.Rslttable
on Labtable.accsnnum = Rslttable.accsnnum;
quit;
合并这两个附件。此函数接受第一个非缺失值,因此如果labtable.accsnnum可用,则接受该值;否则将采用rslttable.accsnnum
proc sql;
create table both as
select coalesce(labtable.accsnnum,rslttable.accsnnum) as accsnnum label="Access Number", Labtable.Lab_lbcount label="Lab_lbtestcd_count",
Rslttable.Rslt_lbcount label="Rslt_lbtestcd_count",
Lab_lbcount-Rslt_lbcount as difference
from work.Labtable
full outer join work.Rslttable
on Labtable.accsnnum = Rslttable.accsnnum;
quit;
这可能会对SQL风格产生很大的影响,尽管在本例中这一点相当明显,而且特定的问题相当普遍,尽管coalesce有时被称为其他东西,如TSQL/SQL Server中的isnull。查询中的列与结果表中的列不匹配。你确定那是对的吗?事实上,他们可能是对的。我相信SAS会自动拒绝第二个accsnnum,因为它没有单独的名称no as。。。这可能会导致日志中出现警告。这会对SQL风格产生很大的影响,尽管在本例中这一点相当明显,而且特定的问题相当普遍,尽管coalesce有时被称为其他东西,与TSQL/SQL Server中的isnull类似。查询中的列与结果表中的列不匹配。你确定那是对的吗?事实上,他们可能是对的。我相信SAS会自动拒绝第二个accsnnum,因为它没有单独的名称no as。。。因此会出现重叠-因此日志中可能会出现警告。这非常有效。非常非常感谢!这已经困扰了我一段时间了!这真是太好了。非常非常感谢!这已经困扰了我一段时间了!