Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何进行完整的外部连接,无论它们是否匹配,都将使用它们的连接条件填充_Sql_Join_Sas_Full Outer Join - Fatal编程技术网

Sql 如何进行完整的外部连接,无论它们是否匹配,都将使用它们的连接条件填充

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

我有两张桌子,我正在做一个完整的外部连接。它们在变量accsnnum上联接,它们都共享该变量。但我有个问题。accsnnum只在两个集合中都存在时才打印出来,但我需要它打印出来,不管它是否同时存在,因为我正在比较按accsnum分组的变量的计数

为了举例说明,我有一个类似这样的labtable,只有这两个变量:

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。。。因此会出现重叠-因此日志中可能会出现警告。这非常有效。非常非常感谢!这已经困扰了我一段时间了!这真是太好了。非常非常感谢!这已经困扰了我一段时间了!