2017-05-08 38 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

我已經用一種解決方法對此進行了排序 - 保留上面寫的代碼,然後將它與只返回缺失數據的查詢聯合。如果有人想提出一個整潔的解決方案,請放心。