/ / SQL Server Order By - tricky-sql-server、sql-order-by

SQL Server Order By - tricky-sql-server、sql-order-by

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

私はFundTypeでグループ化し、次にSortOrderで並べ替える必要があります。しかし、私はこのタイプをFundTypeに応じて維持したいと思っています:DD、FF、BB

だから私は最終的な出力を次のようにしたい:

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

FundType DESC、SortOrderによる注文にはできません。なぜなら、FFが最初に表示され、OrderType By SortOrderを実行できないからです.BBが最初に表示されるからです。

FundTypeの順番を指定してクエリを設定し、各FundTypeグループ内でOrder Byを適用するにはどうすればよいですか?ありがとう。

回答:

回答№1は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