4

とりわけレコード ステータス列を返すクエリがあります。レコード ステータス列には、「アクティブ」、「削除済み」などの値がいくつかあります。

結果を「アクティブ」、「削除済み」、などの順に並べる必要があります...

私は現在、レコードの各セットを取得してから UNION ALL を取得する CTE を作成しています。クエリを実行するためのより良い動的な方法はありますか?

ありがとうございました、

4

3 に答える 3

6

ステータス値をさらに表示するには、次のようにします。

WITH StatusOrders
AS
(
  SELECT StatusOrderID, StatusName
  FROM (VALUES(1, 'Active'), 
              (2, 'Deleted'),
              ...
              n, 'last status')) AS Statuses(StatusOrderID, StatusName)
)
SELECT *
FROM YourTable t
INNER JOIN StatusOrders s ON t.StatusName = s.StatusName
ORDER BY s.StatusOrderID;
于 2013-02-05T08:24:00.813 に答える
5

CASEここで使用できます

ORDER BY CASE WHEN Status = 'Active' THEN 0 ELSE 1 END ASC

しかし、より多くの値がstatusあり、ソートしたい場合ActiveDELETE

ORDER BY CASE WHEN Status = 'Active'  THEN 0 
              WHEN Status = 'Deleted' THEN 1
              ELSE 2 
         END ASC
于 2013-02-05T08:21:22.883 に答える
1
WITH
cteRiskStatus
AS
(
SELECT  RiskStatusID, RiskStatusName
FROM    (VALUES(1, 'Active'),
               (2, 'Draft'),
               (3, 'Occured'),
               (4, 'Escalated'),
               (5, 'Closed'),
               (6, 'Expired'),
               (7, 'Deleted')) AS RiskStatuses(RiskStatusID, RiskStatusName)
)
SELECT * FROM cteRiskStatus

ありがとう

于 2013-02-05T08:48:45.180 に答える