sql - 管理工作室查询
问题描述
不知道给这个标题是什么。我目前正在使用 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
解决方案
我认为这就是您想要的,我没有像您在示例中提到的那样采用所有列。
根据您给定的数据,这应该有效:
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
推荐阅读
- ios - 如何构建独立应用程序对真实设备的本机博览会做出反应?
- python - 如何使用正则表达式删除特定单词之间特定位置的空格?
- android-studio - 如何让用户复制文本并获得通知?
- php - 在 PHP 中验证请求
- php - Laravel Eager Loading 与分区表
- python - 二阶 ODE 系统 Runge Kutta 四阶
- tableau-api - 如何在tableau中聚合表计算
- vba - 如何在 Outlook 中使用 VBA 设置默认打印机
- javascript - 试图在点击时从表中获取价值
- python - 如何在 Python 中随机化图像以及如何在图像顶部添加图像?