【发布时间】:2024-01-22 18:18:01
【问题描述】:
假设我有一张维修票表,如下所示:
Group Ticket Status
----------------------------
00798 299696 Open
21851 574587 Complete
21851 574588 Pending
21852 574589 Office
21866 574613 Test
21869 574617 Shipping
21870 574618 Repair
21871 574620 Open
32102 369151 Repair
43316 393920 Office
60669 433162 Office
65850 445815 Open
65999 446267 Complete
66215 446841 Repair
77818 473653 Complete
79691 477963 Office
82277 483787 Pending
86283 493697 Complete
86283 493698 Complete
仅当组中的每张票都已完成时,我才尝试获取状态为已完成的所有票的列表。因此,从这个数据集中,我会得到这些票:
446267
473653
493697
493698
我不会得到 574587,因为在其组 (21851) 中还有另一张票 (574588) 设置为待处理,未完成。
我已尝试将 ROW_NUMBER() OVER (PARTITION BY GroupNumber, [Status] ORDER BY GroupNumber) 的变体作为子查询,但无法解决这个问题。也许它可以用 group by 和一个子查询来完成?谢谢。
【问题讨论】:
-
我认为你可以用 WHERE NOT EXISTS(...) 来做到这一点
标签: sql group-by sql-server-2012 window-functions