我在特定结构的表中有数据。以下是它的截图:
我希望根据各批次中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然后分支进行排序时,它将State_ID为94的所有行排列在一起,这是我不想要的。那么,我怎样才能以最简单,最快捷的方式实现我想要的结果呢?
答案 0 :(得分:4)
这可以使用像这样的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