2016-04-26 62 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

相关问题