SQL 服务器排序依据 - 棘手

SQL Server Order By - tricky

SortOrder     FundType
9              DD
2              DD
13             FF
22             BB
11             FF

我想按 FundType 分组,然后按 SortOrder 排序。但我想维持这个顺序 w/ respect to FundType: DD, FF, BB

所以我希望最终输出看起来像:

SortOrder  FundType
2           DD
9           DD
11          FF
13          FF
22          BB

我无法按 FundType DESC、SortOrder 进行排序,因为 FF 将首先出现,而我无法按 FundType、SortOrder 进行排序,因为 BB 将首先出现。

我如何设置查询以指定 FundType 的顺序,然后在每个 FundType 分组中应用 Order By?谢谢

你可以用一个CTE来计算每组的顺序:

;WITH CTE AS (
   SELECT FundType, MIN(SortOrder) AS GroupOrder
   FROM #mytable
   GROUP BY FundType
)
SELECT *
FROM CTE

以上,给定以下输入:

CREATE TABLE #mytable (SortOrder INT, FundType VARCHAR(10))
INSERT INTO #mytable VALUES
(9,  'DD'),
(2,  'DD'),
(4,  'FF'),
(22, 'BB'),
(11, 'FF')

产生这个输出:

FundType    GroupOrder
----------------------
BB          22
DD          2
FF          4

我们现在可以使用这个 CTE 组顺序 排序,然后按 SortOrder:

;WITH CTE AS (
  ... cte statements here
)
SELECT m.*
FROM CTE AS c
INNER JOIN #mytable AS m ON c.FundType = m.FundType
ORDER BY GroupOrder, SortOrder

输出:

SortOrder   FundType
--------------------
2           DD
9           DD
4           FF
11          FF
22          BB