2013-08-25 1 views
1

확실하지 작동하지 :SQL은 정렬 CASE의 기반으로 -이 작동하지 않는 이유

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

오, 내 바보 같은 느낌 ... – user1447679

+0

바보 같지 않아요. 전에이 문제에 휩쓸 렸습니다. 해결책은 명확하지 않습니다. –

답변

2

를 사용하여 여러 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

문제는 당신이 경우 문에서 여러 유형을 반환 할 수 없다는 것입니다. 가능한 모든 값은 동일한 유형이어야합니다. 우선 순위 때문에 a.QuestionTitle을 a.date_created의 유형에 따라 날짜 또는 datetime으로 암시 적으로 변환합니다.

두 가지 가능한 해결 방법이 있습니다. 날짜를 문자열로 변환하거나 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 
관련 문제