1

不知道为什么这不起作用:

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

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

非常感谢您的帮助。

4

2 回答 2

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

[快速搜索会发现是第一次命中。]

于 2013-08-25T04:11:26.727 回答
1

问题是您不能从 case 语句中返回多种类型。所有可能的值必须是同一类型。由于优先级,a.QuestionTitle 隐式转换为日期或日期时间(取决于 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
于 2013-08-25T05:09:30.133 回答