T-SQL:如何按最低排名对多行的个人进行排序,但将他们的行分组在一起?

T-SQL: How can I order individuals with multiple rows by minimum Rank but keep their rows grouped together?

我正在创建委员会花名册报告。我有几百行数据,其中有姓名和职位,每个职位都有一个固定的等级,等级越低,该职位在委员会中的地位就越高。

我需要首​​先按照最重要(最低)的排名位置将 VIP 排序到顶部,如果他们在委员会中有任何其他职位,我需要在列表中按升序顺序将它们排在最前面, 然后是排名次优的位置VIP和他们的其他位置按Rank升序排列。

然后——大约100级左右——VIP的职位列表结束,所以我只想让大家从那时起先按名字再按等级排序。

这是我尝试按照我希望的方式组织的数据类型的模型:

RANK POSITION NAME ID
1 Chair Jane J. 10009
3 Treasurer Jane J. 10009
9 Editor Jane J. 10009
2 Vice Chair Kevin K. 10002
5 Director Kevin K. 10002
3 President Laura L. 10003
4 Vice President Manuel M. 10005
10 Asst. Editor Manuel M. 10005
100 Member Anna A. 10010
100 Member Ben B. 10014
50 Coordinator Carry C. 10020
100 Member Carry C. 10020
60 Asst. Coord. Dennis D. 10008
61 Mbr. Coord. Dennis D. 10008

下面是我目前正在使用的 SELECT 语句的简化模型,它没有实现我正在寻找的内容。我尝试了很多自定义列来尝试使我正在寻找的自定义排序成为可能,但 none 有所帮助。

SELECT
RANK
, POSITION_CODE
, LAST_FIRST

FROM Table

ORDER BY RANK, LAST_FIRST
SELECT

MIN(RANK) OVER (PARTITION BY ID) AS MinRank
, RANK
, POSITION_CODE
, LAST_FIRST
, ID

FROM Table

ORDER BY MinRank, RANK, LAST_FIRST

编辑:使用我的新 MinRank 计算,我现在可以首先 ORDER BY 委员会成员的职位 (POSITION_CODE) 具有最低的排名(较低在我的委员会中地位更高的职位的数字)。这会将排名最高的 Position 委员会成员置于列表顶部,并通过其他人的 MinRank 上升,导致列表将具有相同最小 RANK 位置的名称块排序在一起。然后我可以 ORDER BY RANK ascending,这将对这些块本身的排名较低的位置进行排序。最后,我可以 ORDER BY 他们的名字 (LAST_FIRST) 以便 RANK 排序的 MinRanks 的每个块都按姓氏和名字的字母顺序排列。如果需要,为了获得额外的区别,我还可以在最后添加 ORDER BY ID,以区分具有相同名字和姓氏的人。

我的 MIN(RANK) 聚合的 OVER (PARTITION BY ID) 只是一个快捷方式,所以我不必将我所有的属性都放入 GROUP BY.