2

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で両方の列を使用するには?

4

2 に答える 2

3
  • フラグが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
于 2009-08-18T00:37:24.823 に答える
2

通常、条件付きの順序付けを行うには、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
;

しかし、あなたの場合、「日付」の重複は、David B のコメントのように単純化できることを意味します。

于 2009-08-18T00:54:16.853 に答える