2013-12-15 3 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 

Выражение СЛУЧАЙ будет производить 1 для всех «п а /» значения и 0 для остальных, так что сортировка этим выражением первый будет эффективно разместить все н/a '.

+0

Это замечательно - спасибо! Я не знал, что оператор case существует в SQL. – user2571510

1
ORDER BY 
    CASE WHEN col3 <> 'N/A' THEN Col3 ELSE 'ZZZZZ' END, 
     sortID 
Смежные вопросы