假设我们有一个名为PMT的表,
表包含三列i.e (ID, Pmt_Date and Pmt_Amount)
,
ID
列是Primary Key
。
现在我们有了每个员工的付款金额以及四个月的付款日期
i.e Nov 2018,Dec 2018, Jan 2018 and Feb 2018.
查询应提取所有在2018年11月之后薪水已更改(增减)的员工的ID。
答案 0 :(得分:0)
您可以尝试这样的事情
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年11月相同。您可以将数据类型更改为date而不是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'
您可以找到实时演示Here。
答案 1 :(得分:0)
您可以使用exists
:
select p.id from payments p
where exists (
select 1 from payments
where
id = p.id and
month(pmt_date) = 11 and year(pmt_date) = 2018 and
pmt_amount <> p.pmt_amount
)
where p.pmt_date >= '2018-12-01'
这将获得11月之后薪水发生变化的员工的ID,
意思是'2018-12-01'
,与11月的薪水相比。
答案 2 :(得分:0)
select ID
from PMT
where Pmt_Date => '2018-11-01'
group by ID
having count(distinct Pmt_Amount) > 1
如果自Pmt_Amount
起2018-11-01
发生了变化,则不同付款次数(count(distinct Pmt_Amount)
)将超过1。
答案 3 :(得分:0)