2014-09-04 16 views
2

我有以下ORDER BY語句SQL查詢:SQL服務器以便與外殼和多列

ORDER BY SName, DateEnrolledTo desc 

我需要改變這

ORDER BY 
CASE WHEN @SortID='name' OR ISNULL(@SortID,'')='' 
THEN SName, DateEnrolledTo desc END, 
CASE WHEN @SortID ='Hroom' 
THEN Hroom, DateEnrolledTo desc END 

其語法不正確,則有人告訴我如何解決這個問題?這隻適用於如果我只包括1列。我找不到有這種情況的任何問題。

回答

3

正如任何表情CASE計算爲一個值後也THEN宥可以指定一列(或任何其他valid expression):

ORDER BY 
CASE 
    WHEN @SortID='name' OR ISNULL(@SortID,'')='' 
    THEN SName 
    WHEN @SortID ='Hroom' 
    THEN Hroom END, 
DateEnrolledTo desc 
2

用你的case語句來檢查所有條件,並確定哪些列將用於升序條件。

這裏是ORDER BY條款你正在尋找:

ORDER BY CASE 
      WHEN @SortID = 'name' 
       OR ISNULL(@SortID,'') = '' THEN SName 
      WHEN @SortID = 'Hroom' THEN Hroom 
     END, DateEnrolledTo DESC 

希望這會幫助你。