質問

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さんのコメントのように、それを簡略化することができることを意味します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top