2016-04-26 60 views
1

下面是我正在使用的表的示例。這些只代表相關的列到我的查詢使用別名選擇相同的列兩次表

_Requirements

RequirementID    fkOwningWsID 
    -------------------------------------------  
    REQ-RPT-01    1 
    REQ-RPT-02    2 

_Workstream

pk    WsNm 
    -------------------------------------------  
    1    Workstream1 
    2    Workstream2 

mnWorkstream_Leads

fkWsID   fkEeID 
    -------------------------------------------  
    1    1 
    1    2 
    2    1 
    2    2 

下表是一個聯合的結果。員工可以從不同的公司,低於工會列出了所有的員工ID,從公司2(否則爲0)

qryTrackerAllEeList

EeID    Company1_ID   Company2_ID 
    -------------------------------------------  
    1     1      0 
    2     0      2 
對誰都是從公司1(否則爲0)員工的ID和ID爲員工

我試圖查看以下結果

RequirementID  WsNm   Company1_Lead  Company2_Lead 
    -------------------------------------------------------------------- 
    REQ-RPT-01   Workstream1 1     2 
    REQ-RPT-02   Workstream2 1     2 

我已經發布了以下SQL

SELECT DISTINCT Req.RequirementID, Ws.Wsnm, company1_id.ee_id, company2_id.ee_id 
FROM (((([_Requirements] AS Req 
INNER JOIN [_Workstream] AS Ws ON Req.fkOwningWsID = Ws.pkWsID) 
INNER JOIN [mnWorkstream_Leads] AS wsLeads ON Ws.pkWsID = wsLeads.fkWsID) 
LEFT OUTER JOIN qryTrackerAllEeList AS company1 ON wsLeads.fkEeID = company1.Company1_ID) 
LEFT OUTER JOIN qryTrackerAllEeList AS company2 ON wsLeads.fkEeID = company2.Company2_ID) 

的問題,但是,我檢索結果如下

RequirementID  WsNm   Company1_Lead  Company2_Lead 
    -------------------------------------------------------------------- 
    REQ-RPT-01   Workstream1      2 
    REQ-RPT-01   Workstream1 1     
    REQ-RPT-02   Workstream2      2  
    REQ-RPT-02   Workstream2 1 

如何消除這些重複行和空值有什麼建議?

回答

2

使用MAX()GROUP BY,只選擇非空值,並將它們組合成一排:

SELECT DISTINCT Req.RequirementID, Ws.Wsnm, 
MAX(company1_id.ee_id) as Company1_Lead, MAX(company2_id.ee_id) as Company2_Lead, 
FROM (((([_Requirements] AS Req 
INNER JOIN [_Workstream] AS Ws ON Req.fkOwningWsID = Ws.pkWsID) 
INNER JOIN [mnWorkstream_Leads] AS wsLeads ON Ws.pkWsID = wsLeads.fkWsID) 
LEFT OUTER JOIN qryTrackerAllEeList AS company1 ON wsLeads.fkEeID = company1.Company1_ID) 
LEFT OUTER JOIN qryTrackerAllEeList AS company2 ON wsLeads.fkEeID = company2.Company2_ID) 
GROUP BY req.RequirementID, Ws.Wsnm 
+0

就像一個魅力! – Ian

相關問題