2013-12-15 2 views
2

지금까지 제대로 작동하는 테이블에서 항목을 가져 오려면 다음 저장 프로 시저를 사용하고 있습니다. col3이 "n/a"와 같으면이 값을 변경하여 목록의 끝에 끝에 추가해야하며 다른 모든 항목이 그대로 정렬되도록이 방법을 변경할 수 있습니까? "n/a"값이 "n"으로 시작하기 때문에 목록의 중간에 나타나지 않도록하고 싶습니다.SQL Server : 수동 정렬 순서 만들기

"sortID"99가 할당되고 다른 모든 항목의 숫자가 더 작은 "sortID"인 경우에도 마찬가지입니다. (작업)

내 SP :이 어떤 도움, 팀에 대한

ALTER PROCEDURE [dbo].[FetchItems] 
AS 
BEGIN 
    SET NOCOUNT ON; 
    SELECT  col1, 
      col2, 
      col3, 
      col4, 
      col5, 
      sortID 
    FROM  FetchItems 
    WHERE  itemStatus = 'active' 
    ORDER BY sortID, col3 
    FOR XML PATH('itemList'), ELEMENTS, TYPE, ROOT('ranks') 
END 

감사합니다.

답변

3

물론, 당신은 할 수 있습니다 :

ORDER BY CASE col3 WHEN 'n/a' THEN 1 ELSE 0 END, sortID, col3 

때문에이 표현에 의해 정렬, 나머지는 "N/A"값과 0을 모두 1을 생산하는 것 CASE 표현식이 처음 효과적으로 모든 배치됩니다 'N/a '값이 지속됩니다.

+0

정말 완벽합니다. 감사합니다. case 문이 SQL에 있는지 알지 못했습니다. – user2571510

1
ORDER BY 
    CASE WHEN col3 <> 'N/A' THEN Col3 ELSE 'ZZZZZ' END, 
     sortID