2010-03-06 43 views
1

如何將ELSE子句添加到以下代碼中?其他情況如何

ROW_NUMBER() OVER (ORDER BY 
    CASE WHEN @OrderByColumn='ViewCount' AND @OrderDirection=0 THEN docsT.ViewCount END ASC,  
    CASE WHEN @OrderByColumn='AddedDate'AND @OrderDirection=0 THEN docsT.AddedDate END ASC, 
    CASE WHEN @OrderByColumn='AddedBy'AND @OrderDirection=0 THEN docsT.AddedBy END ASC, 
    CASE WHEN @OrderByColumn='Title' AND @OrderDirection=0 THEN docsT.Title END ASC 
) AS RowNum 

回答

1

你可以把順序的外殼,然後選擇字段,你可以使用,你一個價值比較幾個值的情況下的形式。爲了支持升序和降序排序,你必須重複一遍。

order by 
    case when @OrderDirection = 0 then 
    case @OrderByColumn 
     when 'ViewCount' then docsT.ViewCount 
     when 'AddedDate' then docsT.AddedDate 
     when 'AddedBy' then docsT.AddedBy 
     when 'Title' then docsT.Title 
     else docsT.Title 
    end 
    end asc, 
    case when @OrderDirection = 1 then 
    case @OrderByColumn 
     when 'ViewCount' then docsT.ViewCount 
     when 'AddedDate' then docsT.AddedDate 
     when 'AddedBy' then docsT.AddedBy 
     when 'Title' then docsT.Title 
     else docsT.Title 
    end 
    end desc 
+0

+1正確!我認爲@OrderDirection與做賣家或買家有關係 – Andomar 2010-03-06 15:42:58

0

只需添加一些總是在最後評估爲真的東西。

我不知道你的要求是什麼,所以我猜ORDER BY:

ROW_NUMBER() OVER (ORDER BY 
    CASE WHEN @OrderByColumn='ViewCount' AND @OrderDirection=0 THEN docsT.ViewCount END ASC,  
    CASE WHEN @OrderByColumn='AddedDate'AND @OrderDirection=0 THEN docsT.AddedDate END ASC, 
    CASE WHEN @OrderByColumn='AddedBy'AND @OrderDirection=0 THEN docsT.AddedBy END ASC, 
    CASE WHEN @OrderByColumn='Title' AND @OrderDirection=0 THEN docsT.Title END ASC, 
    CASE WHEN 1 = 1 THEN docsT.Title END ASC 
) AS RowNum 
+0

將第二行更改爲最後一行可能是相同的:「docsT.Title ASC」 – hongliang 2010-03-06 15:02:17

0

有許多方法:你可以在IsNull(...,docsT.Title)包住整個案件。或者你可以使用ELSE條款,如:

CASE WHEN OrderDirection = 0 THEN 
    CASE @OrderByColumn 
    WHEN 'ViewCount' THEN docsT.ViewCount 
    WHEN 'AddedDate' THEN docsT.AddedDate 
    WHEN 'AddedBy' THEN docsT.AddedBy 
    ELSE docsT.Title 
    END 
ELSE docsT.Title 
END 
相關問題