SQL Server顺序 - 棘手

时间:2015-02-02 22:19:32

标签: sql-server sql-order-by

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

我想按FundType分组,然后按OrderOrder分组。但我想维持这个顺序与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?感谢。

1 个答案:

答案 0 :(得分:1)

您可以使用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