不确定为什么这不起作用:
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
我收到此错误:从字符串转换日期和/或时间时转换失败。
非常感谢您的帮助。
答案 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