2014-09-25 80 views
6

從我早期這裏的問題Case statement for Order By clause with Desc/Asc sort繼我有這樣的語句:對秩序的聲明具有多個列和DESC/ASC條款排序

SELECT 
    * 
FROM 
    TableName 
WHERE 
ORDER BY 
    CASE @OrderByColumn WHEN 1 THEN Forename END DESC, 
    CASE @OrderByColumnWHEN 2 THEN Surname END ASC 

這個效果很好,但有時候我需要比列多按順序排列。其實我需要的東西是這樣的:

..... 
ORDER BY 
    CASE @OrderByColumn WHEN 1 THEN Forename, Date, Location END DESC 

我不能工作了如何使CASE聲明允許在THEN部分多列。

回答

8

你需要這個嗎?

ORDER BY 
    CASE @OrderByColumn WHEN 1 THEN Forename END DESC, Date, Location, 
    CASE @OrderByColumn WHEN 2 THEN Surname END ASC 
6

即使它們都具有相同的條件,也可以編寫多個案例。

ORDER BY 
    CASE @OrderByColumn WHEN 1 THEN Forename END DESC, 
    CASE @OrderByColumn WHEN 1 THEN Date END DESC, 
    CASE @OrderByColumn WHEN 1 THEN Location END DESC, 
    CASE @OrderByColumn WHEN 2 THEN Surname END ASC 

實際上,您並未指定要排序的列,而是指定一個表達式。如果條件不滿足

case語句返回null,所以實際上這意味着:

CASE @OrderByColumn WHEN 1 THEN Forename ELSE NULL END 

所以,如果@OrderByColumn不爲1,則語句返回始終爲NULL。順便說一句,這並不排除它排序,但它將所有這些行放在結果中,使'SurName'對這組行進行決定性排序。