У меня есть две таблицы (одна для первого квартала, одна для второго квартала), каждая из которых содержит сотрудников, которые получают бонусы в этом квартале. Каждый сотрудник имеет уникальный идентификатор в компании.
Я хочу получить всех сотрудников, у которых есть бонус в q1 или q2. дубликат сотрудника не требуется. Требуются Id и Сумма .
Ниже мое решение, я хочу выяснить, есть ли лучшее решение.
declare @q1 table (
EmployeeID int identity(1,1) primary key not null,
amount int
)
declare @q2 table (
EmployeeID int identity(1,1) primary key not null,
amount int
)
insert into @q1
(amount)
select 1
insert into @q1
(amount)
select 2
select * from @q1
insert into @q2
(amount)
select 1
insert into @q2
(amount)
select 11
insert into @q2
(amount)
select 22
select * from @q2
Мое решение:
;with both as
(
select EmployeeID
from @q1
union
select EmployeeID
from @q2
)
select a.EmployeeID, a.amount
from @q1 as a
where a.EmployeeID in (select EmployeeID from both)
union all
select b.EmployeeID, b.amount
from @q2 as b
where b.EmployeeID in (select EmployeeID from both) and b.EmployeeID NOT in (select EmployeeID from @q1)
Result:
EmployeeID, Amount
1 1
2 2
3 22