2014-09-25 52 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'对这组行进行决定性排序。