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
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