2010-03-06 6 views
1

Comment puis-je ajouter la clause ELSE au code suivant?ELSE dans CASE WHERE

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 

Répondre

1

Vous pouvez mettre l'ordre dans un boîtier extérieur, puis pour sélectionner le champ, vous pouvez utiliser la forme du cas où l'on compare une valeur à plusieurs valeurs. Pour prendre en charge le tri ascendant et descendant, vous devez le répéter à nouveau.

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 Droit! Je pensais que @OrderDirection avait quelque chose à voir avec être un vendeur ou un acheteur :) – Andomar

0

Ajoutez simplement quelque chose qui sera toujours vrai à la fin.

Je ne sais pas quels sont vos besoins, donc je devine 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

Il sera probablement le même pour changer l'avant-dernière ligne en: "docsT.Title ASC" – hongliang

0

Il y a plusieurs façons: vous pouvez envelopper tout le cas dans un IsNull(...,docsT.Title). Ou vous pouvez utiliser la clause ELSE, comme:

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 
Questions connexes