Вы можете попробовать что-то вроде этого
create table #PMT(
ID Int Identity(1, 1) not null primary Key,
empCd varchar(5),
Pmt_Date varchar(10),
Pmt_Amount decimal(18, 2))
Insert into #PMT (empCd, Pmt_Date, Pmt_Amount) values
('A001', 'Nov 2018', 10000),('A001', 'Dec 2018', 10000),('A001', 'Jan 2018', 10000),('A001', 'Feb 2018', 10000),
('A002', 'Nov 2018', 15000),('A002', 'Dec 2018', 15000),('A002', 'Jan 2018', 15000),('A002', 'Feb 2018', 15000),
('A003', 'Nov 2018', 25000),('A003', 'Dec 2018', 15000),('A003', 'Jan 2018', 22000),('A003', 'Feb 2018', 23000),
('A004', 'Nov 2018', 55000),('A004', 'Dec 2018', 45000),('A004', 'Jan 2018', 46000),('A004', 'Feb 2018', 47000),
('A005', 'Nov 2018', 48000),('A005', 'Dec 2018', 45000),('A005', 'Jan 2018', 46000),('A005', 'Feb 2018', 47000)
Select distinct emp.empCd, emp.Name
from #PMT p
inner join #emp emp on p.empCd = emp.empCd
where p.Pmt_Amount not in (
Select Pmt_Amount from #PMT
inner join #emp on #PMT.empCd = #emp.empCd
where Pmt_Date <> 'Nov 2018'
) and p.Pmt_Date = 'Nov 2018'
Здесь результат будет таким, как показано ниже.
empCd Name
-----------
A003 C
A004 D
A005 E
Здесь на выходе A и B не пришли, потому что его зарплаты одинаковыкак в ноябре 2018. Вы можете изменить тип данных как дату вместо Varchar и применить Month()
и Year()
с датой, чтобы также получить месяц и год платежа.
Чтобы получить сотрудника, который получил ихЗарплата такая же, как и в другой месяц, вам нужно использовать только оператор in
вместо оператора not in
, как показано ниже.
Select distinct emp.empCd, emp.Name
from #PMT p
inner join #emp emp on p.empCd = emp.empCd
where p.Pmt_Amount in (
Select Pmt_Amount from #PMT
inner join #emp on #PMT.empCd = #emp.empCd
where Pmt_Date <> 'Nov 2018'
) and p.Pmt_Date = 'Nov 2018'
Вы можете найти живую демонстрацию Здесь .