不确定要赋予什么标题。我目前正在使用SQL Server Management Studio 2012中的下表编写查询。
如果雇员具有资格'BDE',则该雇员取代了资格'RVT',并且'RVT'不需要在EmpID 1的我的输出中显示。它确实需要为EMP2显示,因为他们没有资格' BDE'
我已经尝试了使用Union和行分区的各种方式,我敢肯定这不是一个特别困难的请求,但是我的想法已经用完
EmpID Department ObtainedDate ExpiryDate Qualification DaystoExpire
1 HR 2019-06-12 2024-06-12 BDE 1819
1 HR 2017-06-09 2021-09-18 FGA 821
1 HR 2019-06-18 2021-09-18 RVT 821
1 HR 2019-01-28 2020-01-28 HIJ 222
1 HR 2019-06-03 2019-07-03 TTT 13
2 payroll 2018-10-18 2019-10-18 RVT 120
我想要的
EmpID Department ObtainedDate ExpiryDate Qualification DaystoExpire
1 HR 2019-06-12 2024-06-12 BDE 1819
1 HR 2017-06-09 2021-09-18 FGA 821
1 HR 2019-01-28 2020-01-28 HIJ 222
1 HR 2019-06-03 2019-07-03 TTT 13
2 payroll 2018-10-18 2019-10-18 RVT 120
答案 0 :(得分:1)
我认为这就是您想要的,我并没有像您在示例中提到的那样列出所有列。
根据您给定的数据,这应该有效:
Declare @t table (EMPID int ,Department varchar(50),obtaineddate varchar(50),ExpiryDate varchar(50),Qualification varchar(50),DaystoExpire INT)
insert into @t values (1,'HR','2019-06-12','2024-06-12','BDE',1819),
(1,'HR','2017-06-09','2021-09-18','FGA',821),
(1,'HR','2019-06-18','2021-09-18','RVT',821),
(1,'HR','2019-01-28','2020-01-28','HIJ',222),
(1,'HR','2019-06-03','2019-07-03','TTT',13),
(2,'Payroll','2018-10-18','2019-10-18','RVT',120)
select * from @t a
where not exists ( select * from @t where a.EMPID=EMPID and a.Qualification='RVT')
UNION
select * from @t a
where exists ( select * from @t where a.EMPID=EMPID and Qualification='RVT')
and not exists (select * from @t where a.EMPID=EMPID and Qualification='BDE')
order by EMPID,Qualification