3 Stimmen

Bestellung nach Feld in nicht-alphabetischer Reihenfolge in SQL Server 2000

Ich versuche, Artikel nach einer Liste von Namen zu ordnen, die nicht in alphabetischer Reihenfolge sind. Nachdem ich die Liste vervollständigt habe, versuche ich, den Rest in alphabetischer Reihenfolge fortzusetzen, ohne die, die ich ursprünglich ausgewählt habe.

Siehe Beispiel:

EINGABE:

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

dann schließlich den Rest in alphabetischer Reihenfolge sortieren...

OUTPUT:

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

10voto

Michael Fredrickson Punkte 36194
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:

Ich habe Ihre Bemerkung gesehen, dass es von jedem Benutzer konfigurierbar ist. In diesem Fall müssten Sie eine FavoriteGeniuses Tabelle, die festhält, welcher Nutzer welche Methode bevorzugt Geniuses und dann eine Sortierreihenfolge in dieser Tabelle angeben:

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

4voto

aF. Punkte 62254

Versuchen Sie es so:

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X