根据组合在一起的多个列对 table 中的行进行排序

Ordering rows in table based on multiple columns grouped together

我在 table 中有特定结构的数据。这是它的屏幕截图:

我希望所有这些行都根据 State_ID 在各自批次中的顺序进行排序。这是我想要的输出:

我们可以说我希望行根据其单个批次中的最小到最大 State_ID 进行排序。这意味着所有最大 State_ID 为 95 的分支将彼此相邻排列,然后以 State_ID 为 100 分支,最后以 State_ID 为 104 分支。

我也为它创建了一个示例 sql 脚本。

DECLARE @tbl AS TABLE(
  State_ID INT,
  Branch INT,
  ID INT
);

INSERT INTO @tbl
SELECT 94,1,1
UNION ALL SELECT 95,1,2
UNION ALL SELECT 94,2,3
UNION ALL SELECT 95,2,4
UNION ALL SELECT 94,3,5
UNION ALL SELECT 103,3,6
UNION ALL SELECT 104,3,7
UNION ALL SELECT 94,4,8
UNION ALL SELECT 95,4,9
UNION ALL SELECT 94,5,10
UNION ALL SELECT 96,5,11
UNION ALL SELECT 100,5,12
UNION ALL SELECT 94,6,13
UNION ALL SELECT 95,6,14

当我尝试基于 State_ID 进行排序,然后是 Branch 时,它将所有带有 State_ID 的行排列为 94,这是我不想要的。那么,如何才能以最简单快捷的方式达到我想要的效果呢?

这可以使用像这样的 CTE 来完成

;WITH cteX
AS(
    SELECT T.Branch, MIN(T.State_ID) 'Min_StateId', MAX(T.State_ID) 'Max_StateId'
    FROM @tbl T
    GROUP BY T.Branch
)
SELECT B.*
FROM @tbl B
INNER JOIN cteX X ON X.Branch = B.Branch
ORDER BY X.Max_StateId, Branch, State_ID