使用无序字段作为条件,为每个员工选择一行

Ste*_*M82 5 sql sql-server-2000 greatest-n-per-group

我有一个如下所示的数据集.

EMPLID  PHONE_TYPE  PHONE
------  ----------  --------
100     HOME        111-1111
100     WORK        222-2222
101     HOME        333-3333
102     WORK        444-4444
103     OTHER       555-5555
Run Code Online (Sandbox Code Playgroud)

我想使用PHONE_TYPE字段为每个员工选择一行来建立首选项.如果员工有一个,我想要家庭电话号码,如员工100和101的情况.如果不存在家庭电话号码,我想要工作号码(员工102),作为最后的手段,我会带其他与员工103一样的数字.实际上我的表有大约十几个PHONE_TYPE字段的值,所以我需要能够扩展任何解决方案,以包括不仅仅是我在示例中显示的三个值.有什么想法吗?谢谢.

g.d*_*d.c 2

我忘了,Server 2000 支持 Coalesce 吗?如果是的话,我认为这会起作用:

Select Distinct EmplID, Coalesce(
  (Select Phone from Employees where emplid = e1.emplid and phone_type = 'HOME'),
  (Select Phone from Employees where emplid = e1.emplid and phone_type = 'WORK'),
  (Select Phone from Employees where emplid = e1.emplid and phone_type = 'OTHER')
) as Phone
From Employees e1
Run Code Online (Sandbox Code Playgroud)