2009-08-18 53 views
2

使用case-then塊,我需要選擇如何訂購我的SQL 2008查詢,由[status] ASC, [date] DESC或只是[date] DESCCASE在order by幾欄

我只知道如何使用一列:

SELECT * 
FROM table 
ORDER BY 
    CASE WHEN @flag = 0 
     THEN R.[date] END DESC, 
    CASE WHEN @flag = 1 
     THEN R.[status] END ASC 

如何在第二種情況下使用兩列?

回答

3
  • 如果您的標誌爲0,那麼我們將通過(null,r.date desc)訂購 。
  • 如果沒有,我們將 ORDER BY(r.Status,r.date DESC)

使用CASE表達式爲 「項目」 爲排序的新值。

SELECT * 
FROM table 
ORDER BY 
    CASE WHEN @flag = 0 THEN r.Status ELSE null END, 
    r.[date] desc 
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 
; 

但在你的情況下,「日期」的重疊意味着您可以簡化它像大衛B的評論。

+0

謝謝!很有用 – arahant 2013-02-22 11:15:45