SQL Server:创建手动排序顺序

时间:2013-12-15 17:29:33

标签: sql sql-server sorting stored-procedures

我正在使用以下存储过程,以便从目前正常工作的表中获取项目。 有没有办法改变这个,以便如果col3等于“n / a”那么这些值应该添加到列表的末尾,其他一切按原样排序? 我想实现“n / a”值不会出现在我的列表中间,因为它们以“n”开头。

如果他们获得“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

感谢您对此提供任何帮助,Tim。

2 个答案:

答案 0 :(得分:3)

当然,你可以这样做:

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

CASE表达式将为所有“n / a”值生成1,为其余值生成0,因此首先按此表达式排序将有效地将所有“n / a”值置于最后。

答案 1 :(得分:1)

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