首页 > 解决方案 > 管理工作室查询

问题描述

不知道给这个标题是什么。我目前正在使用 SQL Server Management Studio 2012 中的下表编写查询。

如果员工具有“BDE”资格,则该资格将取代“RVT”资格,并且“RVT”不需要在我的 EmpID 1 输出中显示。它确实需要为 EMP2 显示,因为他们没有资格“BDE”

我已经尝试过使用联合和行分区的各种方法,我确信这不是一个特别苛刻的要求,但我已经没有想法了

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

标签: sqlsql-server-2012

解决方案


我认为这就是您想要的,我没有像您在示例中提到的那样采用所有列。

根据您给定的数据,这应该有效:

    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

推荐阅读