Запрос SQL для отображения сведений о сотруднике на основе условия - PullRequest
0 голосов
/ 28 мая 2018

У меня есть две таблицы со следующей схемой:

A)

--------------
Employee
-------------- 
EmpID  EmpName 
1      Abc

B)

Address 
-----------------------------------
AddressId EmpID  Address1 Status
-----------------------------------
1         1      Abc 1    Active
2         1      Abc 2    Inactive

Я хочу отобразить данные сотрудника, такие как EmpName, на основе Address1в следующем сценарии:

  • a) Если у сотрудника есть активный и неактивный адрес, запрос отобразит активный адрес.
  • b) Если у сотрудника есть только неактивный адрес, запросотобразит неактивный адрес.
  • c) Если у Сотрудника есть несколько активных или неактивных адресов, запрос отобразит первый адрес в базе данных, отдавая приоритет активному адресу.

Ниже мойЗапрос SQL

SELECT a.EmpID, a.status,   Count(a.Status) as Count,      
CASE  
 WHEN Count(a.Status) = 1 and a.Status In ('Active', 'Inactive') 
 THEN (select top 1 a.Address1 from Address a where a.Status = 'Active')

 WHEN a.Status= 'Inactive' and count(a.Status) = 1
 THEN (select top 1 a.Address1 from Address a where a.Status = 'Inactive')

 WHEN Count(a.Status) > 1 and a.Status In ('Active', 'Inactive') 
 THEN (select top 1 a.Address1  from Address a where a.Status = 'Active') 
END AS Address1 
from Address a where  Attendee_Id= 1 group by a.Status, Address1, a.EmpId

Ответы [ 2 ]

0 голосов
/ 29 мая 2018

подход к номеру строки

select * from 
(
select *  
     , count(*)     over (partition by e.EmpID) as cnt 
     , row_number() over (partition by e.EmpID 
                          order by a.Status, a.AddressId) as rn
from employee e
join address a
  on a.EmpID = e.EmpID 
) tt
where tt.rn = 1
0 голосов
/ 28 мая 2018

Если я правильно понимаю, вы можете использовать outer apply:

select e.*, a.*
from employee e outer apply
     (select top 1 a.*
      from address a
      where a.empId = e.empId
      order by status,  -- "Active" is before "Inactive"
               addressId
     ) a;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...