ORDER BY 数列の CASE
-
18-09-2019 - |
質問
case-then ブロックを使用して、SQL 2008 クエリの順序を選択する必要があります。 [status] ASC, [date] DESC
あるいは単に [date] DESC
.
私は 1 つの列の使用方法しか知りません。
SELECT *
FROM table
ORDER BY
CASE WHEN @flag = 0
THEN R.[date] END DESC,
CASE WHEN @flag = 1
THEN R.[status] END ASC
2 番目の CASE で両方の列を使用するにはどうすればよいですか?
解決
- フラグが0の場合は、(null、r.date desc)で注文します。
- そうでない場合は、(R.Status、R.Date DESC)で注文します。
CASE 式を使用して、順序付けの新しい値を「投影」します。
SELECT *
FROM table
ORDER BY
CASE WHEN @flag = 0 THEN r.Status ELSE null END,
r.[date] desc
他のヒント
は、一般的に、条件付き発注を入れるために、あなただけのCASE文を繰り返します。
SELECT *
FROM table
ORDER BY
CASE WHEN @flag = 0 THEN R.[date] END DESC,
CASE WHEN @flag = 0 THEN R.[somethingelse] END ASC,
CASE WHEN @flag = 1 THEN R.[status] END ASC
;
しかし、あなたの場合には、「日付」の重なりは、あなたがデビッド・Bさんのコメントのように、それを簡略化することができることを意味します。
所属していません StackOverflow