sql - 左连接返回我想排除的附加数据
问题描述
我有 2 个如下表:
Employee:
EmployeeId
EmployeeName
DeptId
Transactions:
TRID
EmployeeId
Status(Pending,Done,InProgress,Rejected)
现在我想从EmployeeTable for DeptId = 100
. 我想计算Pending
那些交易的员工的状态pending
。
因此,如果在 Transactions 表中找到员工记录,那么只想返回一个列,说明员工是否有任何待处理的交易)
询问:
SELECT
e.*,
CASE WHEN (t.EmployeeId is not null and t.Status!= 'Done')
THEN CAST(1 AS BIT)
ELSE CAST(0 AS BIT)
End as IsPendingTransaction,
FROM
Employee e
left join Transactions t on e.EmployeeId = t.EmployeeId
where e.DeptId = 100
现在的问题是,有些员工在交易表中有多个交易,但对于这些员工,我只想考虑他们的最新交易并据此计算 IsPendingTransaction 状态。基本上order by Descending on TRID
在从事务表中计算员工的 IsPendingTransaction 状态时。如果员工没有任何交易,那么 IsPendingTransaction 将为“假”。
谁能帮我解决这个问题?
解决方案
使用outer apply
:
SELECT e.*,
(CASE WHEN (t.EmployeeId is not null and t.Status <> 'Done')
THEN CAST(1 AS BIT)
ELSE CAST(0 AS BIT)
End) as IsPendingTransaction
FROM Employee e OUTER APPLY
(SELECT TOP (1) t.*
FROM Transactions t
WHERE e.EmployeeId = t.EmployeeId
ORDER BY t.trID DESC
) t
WHERE e.DeptId = 100;
推荐阅读
- qgis - QGIS打印布局偏移图例标签?
- java - 有没有办法将 Class 作为参数传递给 JAXB XMLAdapter 或从另一个类访问 Getter 方法
- reactjs - 如何利用 useEffect 挂钩从 Firebase 实时数据库中获取数据
- datetime - 为什么 JSON 绑定中的时间格式会发生变化?
- python - python请求模块在已经找到的url中查找url
- sql - 使用 SQL SERVER 2014 过滤版本 Varchar 列
- r - R:逆 fft() 以确认我的手动 DFT 算法不准确?
- python - 将 fastapi 与 plotly.dash 结合并将令牌依赖项添加为身份验证的问题
- java - 无法将 binance-api-client 导入 JavaFX 应用程序
- c# - 如何在运行时从 Windows.Form.ListBox C# 动态禁用选定项