Упорядочить по полю в не алфавитном порядке в SQL Server 2000 - PullRequest
3 голосов
/ 03 февраля 2012

Я пытаюсь упорядочить элементы по списку имен, которые не в алфавитном порядке.После заполнения списка я пытаюсь продолжить остальные в алфавитном порядке без тех, которые я первоначально выбрал.

См. Пример:

ВХОД:

print 'Results:'  
select * from Geniuses
    order by ('Charles Babbage', 
              'Albert Einstein', 
              'Adrien-Marie Legendre', 
              'Niels Henrik Abel')  

, а затем, наконец, отсортировать остальные в алфавитном порядке ...

ВЫХОД:

Results:
Charles Babbage ... details
Albert Einstein ...
Adrien-Marie Legendre ...
Niels Henrik Abel ...
Arthur Cayley ...
...

Ответы [ 2 ]

10 голосов
/ 03 февраля 2012
select * from Geniuses
order by
    -- First, order by your set order...
    case FullName
        when 'Charles Babbage' then 1
        when 'Albert Einstein' then 2
        when 'Adrien-Marie Legendre' then 3
        when 'Niels Henrik Abel' then 4
        else 5 
    end,
    -- Then do a secondary sort on FullName for everyone else.
    FullName

EDIT:

Я видел ваш комментарий о том, что он настраивается каждым пользователем. В этом случае вам понадобится таблица FavoriteGeniuses, которая отслеживает, какой пользователь предпочитает какую Geniuses, а затем имеет порядок сортировки, указанный в этой таблице:

select * 
from 
    Geniuses g left join
    FavoriteGeniuses fg 
        ON fg.GeniusID = g.GeniusID 
        AND fg.UserID = @UserID
order by
    -- The higher the number, the first up on the list.
    -- This will put the NULLs (unspecified) below the favorites.
    fg.SortPriority DESC, 
    f.FullName
4 голосов
/ 03 февраля 2012

Попробуй так:

select * from Geniuses
order by
   case when columnName = 'Charles Babbage' then 0
     when columnName = 'Albert Einstein' then 1
     when columnName = 'Adrien-Marie Legendre' then 2
     when columnName = 'Niels Henrik Abel' then 3
     else 4
     end,
   columName
...