SQL Server Order By - хитрый

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

Я хочу группировать по FundType, а затем Order By SortOrder. Но я хочу сохранить этот порядок в отношении FundType: DD, FF, BB

Поэтому я хочу, чтобы конечный результат выглядел так:

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

Я не могу выполнить Order By FundType DESC, SortOrder, потому что тогда FF появится первым, а я не могу выполнить Order By FundType, SortOrder, потому что тогда BB появится первым.

Как настроить запрос, в котором я указываю порядок FundType, а затем применяю Order By в каждой группе FundType? Благодарю.

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
Другие вопросы по тегам