2013-12-15 63 views
2

我正在使用以下存儲過程,以便從迄今爲止工作正常的表中獲取項目。 有沒有辦法改變這個,以便如果col3等於「n/a」,那麼這些值應該被添加到列表的末尾,其他所有東西都按原樣排序? 我想實現「n/a」值不會出現在我的列表中間,因爲它們以「n」開頭。SQL Server:創建手動排序順序

如果所有其他項目都具有較低的數字「sortID」,則分配「sortID」99也同樣可行。

我的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 

CASE表達式將產生1對所有的「N/A」的價值觀和0的休息,通過這種表達這樣的排序首先將有效地將所有的「N/'值'最後。

+0

這很完美 - 非常感謝!我不知道SQL中存在的case語句。 – user2571510

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