我有一张桌子,上面满是公司的电话号码。我的问题是,雇员每拥有一个号码,我们都会有一行,因此,如果他有一个主电话和一部手机,我们将有两排。
现在,我需要显示所有员工的列表,包括他们的电话号码,手机号码(如果有的话)以及电子邮件,但是电子邮件在另一个表中。我正在使用SQL。
一个例子:
电话表
ID | EmpID | FullName | Number | Type | ---------------------------------------------------------------- 115 | 02 | ManuelSan | +34935556663 | Fix | 116 | 02 | ManuelSan | +34652315453 | Mobile | 117 | 06 | Camillete | +34934445621 | Fix | 118 | 07 | MarcusEsq | +34932547841 | Fix | 119 | 08 | FionaYem | +34965214785 | Fix | 120 | 08 | FionaYem | +34652132124 | Mobile |
邮件表
ID | empID | Fullname | Email | ----------------------------------------------------------------- 25 | 02 | ManuelSan | Manuelsan@gg.com | 26 | 06 | Camillete | Camillete@gg.com | 27 | 07 | MarcusEsq | MarcusEsq@gg.com | 28 | 08 | FionaYem | FionaYem@gg.com |
所以我想要这个输出
Fullname | Fix | Mobile | Email ------------------------------------------------------------------ ManuelSan | +34935556663 | +34652315453 | Manuelsan@gg.com Camillete | +34934445621 | NULL | Camillete@gg.com MarcusEsq | +34932547841 | NULL | MarcusEsq@gg.com FionaYem | +34965214785 | +34652132124 | FionaYem@gg.com
但是我这样做:
SELECT distinct telf.Fullname, telf.Number, acti.EMAIL FROM PhoneTable telf left outer join EmailTable as acti on acti.empID = telf.empID
我知道我需要做其他事情,但我不知道该怎么做。如果他有电话和手机,则每名员工可获得两行。
我该怎么办?
问候,
大量冗余数据,可能不一致。但是,如果我们假设empid定义了名称并且其中PhoneTable包含每个员工的条目,则查询可能如下所示。查询的第一部分将一个雇员的不同记录合并为一个记录;然后,左外部联接将获得相应的电子邮件。请注意,如果有员工拥有电子邮件但甚至没有一个电话号码,查询仍无法完成:
empid
PhoneTable
select * from (select empid, max(fullname), max(case when type='Fix' then Number else NULL end) as fix, max(case when type='Mobile' then Number else NULL end) as Mobile from PhoneTable group by empid) phone left outer join EMailTable e on phone.empid=e.empid