2017-09-25 64 views
-1

我有两个表在它们之间的公共基础上连接,当case条件满足时,我需要输出中两个表中的每一列。我看到两列都会返回它们各自的记录,但我看到了一个问题。我看到重复,我不知道我在这里做错了什么。附图为enter image description here,更多详情。当条件符合时选择没有重复的值

+0

猜测你有typetable为每个员工多行。每种类型一个。 –

+0

是的,所以我需要EmpID和EmpAltID,但EmpName只有一次,并且它们在类型表中有一个ID和一个备用ID。 – Sanj

+0

它总是有相同的ID,所以看起来你可以简单地'选择doctable.docnum,emptable.empnum,emptable.empid,emptable.empid作为empaltid来自...'而根本不加入类型表。如果你不能,请解释为什么不。 –

回答

2

你需要使用聚合功能和GROUP BY

SELECT d.docnum DocNumber, 
     e.empnam EmpName, 
     MAX(CASE 
       WHEN t.EmpTypID = '4' THEN e.EmpID 
      END) EmpID, 
     MAX(CASE 
       WHEN t.EmpTypID = '2' THEN e.EmpID 
      END) EmpAltID 
FROM DocTable d 
LEFT JOIN EmpTable e 
    ON d.docnum = e.docnum 
LEFT JOIN TypeTable t 
    ON e.docnum = t.docnum 
GROUP BY d.docnum, 
     e.empnam 
; 
0

尝试分组依据

Select 
........ 
........ 
max(CASE 
       WHEN t.EmpTypID = '4' THEN e.EmpID 
      END) EmpID, 
......... 
GROUP BY d.docnum, 
     e.empnam 
;