2017-05-08 63 views
0

我有一个包含四列的表:公司,公司编号,团队,IsActive,卷 ,其中IsActive为0或1.这些编号是随机分配的。如何使用类似外部连接和全部外部连接将表加入到自己

大多数公司在表中有两种类型的入口,一种是活动员工数量(IsActive = 0),一种是非活动员工数量(IsActive = 1)。在这种情况下,公司对非在职员工的录入将沿着“前雇员”和公司名称进行。但是,有些是“前职员”(不带连字符)或其他变体。在其他情况下,公司字段将完全匹配,即非活动员工条目中的公司与活跃员工条目中的公司相同。

整个isactive = 0和isactive = 1记录中的队名相同。

并非所有公司都会为活跃员工设立条目,并非所有公司都有非活动员工的条目。

我需要做的就是为每个公司和团队确定匹配的活动和非活动条目,并添加卷,将其与公司字段中的值作为活动条目返回,或者如果没有活动条目,公司字段中的值为非活动条目的名称。

我试图

select coalesce(a.company,b.company) as company 
,coalesce(a.team,b.team) as team 
,sum(isnull(a.Volume,0) + isnull(b.Volume,0)) 
from tblA a 
full outer join tblA b 
on b.company like '%' + a.company 
and a.team = b.team 
and b.isactive = 1 
where a.isactive = 0 
group by coalesce(a.company,b.company) 
,coalesce(a.team,b.team) 

但我不回来没有任何isactive = 0项的公司。

有什么想法?

+0

答案有帮助吗? –

回答

0

你的where子句会自动排除那些没有活动行所有的公司:当我想你的意见的

where a.isactive = 0 

更新......,我意识到,是行不通的。你可以试试这个WHERE子句。这应该返回的结果总是有左边的IsActive = 1和右边的IsActive = 0,但也占空位。

select coalesce(a.company,b.company) as company 
    ,coalesce(a.team,b.team) as team 
    ,sum(isnull(a.Volume,0) + isnull(b.Volume,0)) 
from tblA a 
full outer join tblA b 
    on b.company like '%' + a.company 
     and a.team = b.team 
     and b.isactive = 1 
where ((a.isactive = 1) OR (a.isactive IS NULL)) 
    AND ((b.isactive = 0) OR (b.isactive IS NULL)) 
group by coalesce(a.company,b.company) 
,coalesce(a.team,b.team) 
+0

Will 'where a.isactive!= b.isactive' 不是重复的记录,这意味着我每次记录两次记录的音量,一次是从左侧版本开始,一次是从右侧开始? – dunxwantok

+0

我认为加入 ''在b.company上'%'+ a.company' 将处理需要担心的任何事情,如 'REPLACE(REPLACE(a.companyname,'e​​x employees of','' ),'ex-employees of','')' esdpecially esdpecially因为有许多不同的方式,只有一个连字符,只有一个空格,连字符前后有一个空格,之前,或之后,或其他我没有发现的组合。 – dunxwantok

+0

好点。我已经更新了这个。我认为这可能有效。 –

0

我已经用一种解决方法对此进行了排序 - 保留上面写的代码,然后将它与只返回缺失数据的查询联合。如果有人想提出一个整洁的解决方案,请放心。