【发布时间】:2021-04-24 21:53:01
【问题描述】:
我有一张桌子,上面有一组任务,如下所示。我想知道哪个 WOID 已完成所有工作任务(T01、T02、T03)以及任何未完成的管理任务(T04、T05),这意味着任务 T01、T02 和 T02 必须处于完成状态,并且要么任务 T04 或 T05 处于未完成状态。我的查询将返回结果 WOID W02,因为它符合条件。我很难在查询中包含上述逻辑。
| Task ID | Status | WOID |
|---|---|---|
| T01 | Complete | W01 |
| T02 | Pending | W01 |
| T03 | Complete | W01 |
| T04 | Pending | W01 |
| T05 | Pending | W01 |
| T01 | Complete | W02 |
| T02 | Complete | W02 |
| T03 | Complete | W02 |
| T04 | Complete | W02 |
| T05 | Pending | W02 |
首先,我尝试查找包含所有已完成任务的 WOID,然后加入另一个子查询以找出未完成的管理任务但未获得预期结果。对此的任何帮助将不胜感激。
<code>
select a.WOID from
( select a.TASKID,a.WOID,a.STATUS,row_number()over
(partition by a.TASKSID order by a.TASKSID ,a.WOID,a.STATUS )rno from Task a
Left join Task b on a.TASKSID= b.TASKSID) a
where rno=1
and a.status='COMPLETE' and a.TASKSID not in ('T04','T05') </code>
【问题讨论】:
标签: sql sql-server tsql sql-server-2012 subquery