SQL基于CASE排序 - 不工作

时间:2013-08-25 04:05:59

标签: sql sql-server

不确定为什么这不起作用:

ORDER BY a.QuestionTitle

什么时候它起作用。 但在下面,如果SortBy等于4 ......

ORDER BY 
CASE WHEN (@SortBy = 1) THEN a.Date_Created 
     WHEN (@SortBy = 2) THEN a.Date_Created
     WHEN (@SortBy = 3) THEN a.Date_Created
     WHEN (@SortBy = 4) THEN a.QuestionTitle 
 END DESC

我收到此错误:从字符串转换日期和/或时间时转换失败。

非常感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

使用多个CASE语句:

ORDER BY 
    CASE WHEN @SortBy = 1 THEN a.Date_Created END DESC,
    CASE WHEN @SortBy = 2 THEN a.Date_Created END DESC,
    CASE WHEN @SortBy = 3 THEN a.Date_Created END DESC,
    CASE WHEN @SortBy = 4 THEN a.QuestionTitle END DESC

[快速搜索首先会发现this。]

答案 1 :(得分:1)

问题是你不能从case语句中返回多个类型。所有可能的值必须属于同一类型。由于优先级,a.QuestionTitle隐式转换为date或datetime(取决于a.date_created的类型)。

您有两种可能的解决方案,要么将日期转换为字符串,要么为a.QuestionTitle使用单独的case语句。

Case when @sortby in(1,2,3) then a.date_created end desc,
Case when @sortby=4 then a.QuestionTitle end desc

Case when @sortby in(1,2,3) then convert(varchar(22), a.date_created, 121) 
     when @sortBy=4 the a.questionTitle end desc