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