2017-11-20 19 views
-3

mir eine Abfrage wie diese:Sortieren nach zwei Spalten mit der Verwendung von CASE WHEN

SELECT 
    ROW_NUMBER() OVER(ORDER BY USER_FNM, USER_LNM) AS ROW_NUM, 
    USER_TEL, USER_FAX, USER_MOB    
FROM 
    BAUSER  
ORDER BY    
    CASE 
     WHEN @cOrderBy = 'USER_FNM_USER_LNM ASC' THEN USER_LNM 
    END ASC, 
    CASE 
     WHEN @cOrderBy = 'USER_FNM_USER_LNM DESC' THEN USER_LNM 
    END DESC, 
    CASE 
     WHEN @cOrderBy IS NULL THEN USER_KEY 
    END ASC 
    OFFSET @iStartIndex ROWS 
    FETCH NEXT @iRowsPerPage ROWS ONLY 

Was Ich mag würde durch zwei Spalten zu tun ist, Sortierung - aber dies zeigt Syntaxfehler:

CASE WHEN @cOrderBy = 'USER_FNM_USER_LNM ASC' THEN USER_LNM, USER_FNM END ASC 

Haben Sie eine Idee, wie Sie in diesem Fall nach zwei Spalten sortieren?

+1

Mögliche doppelte von [T-SQL Bedingte Reihenfolge von] (https://stackoverflow.com/questions/15621609/t-sql-conditional-order-by) – plaidDK

+0

Das hat nichts mit meiner Frage zu tun. Der Typ fragt, wie man sortiert - das weiß ich schon, was Sie an meiner Frage sehen können. Ich weiß nicht, wie ich nach zwei Spalten sortieren soll. – FrenkyB

+0

@ FrenkyB, sollten Sie den verknüpften Artikel in der angenommenen Antwort betrachten. – Alex

Antwort

1

CASE ist ein Ausdruck, der einen einzelnen Ausdruck/Wert zurückgibt. Sie benötigen eine CASE Anweisung pro Spalte schreiben:

ORDER BY    
CASE WHEN @cOrderBy = 'USER_FNM_USER_LNM ASC'  THEN USER_LNM END ASC, 
CASE WHEN @cOrderBy = 'USER_FNM_USER_LNM DESC'  THEN USER_LNM END DESC, 
CASE WHEN @cOrderBy IS NULL       THEN USER_KEY END ASC, 

CASE WHEN @cOrderBy = 'USER_FNM_USER_LNM ASC'  THEN USER_FNM END ASC, 
CASE WHEN @cOrderBy = 'USER_FNM_USER_LNM DESC'  THEN USER_FNM END DESC 

Update (aktualisiertem Frage zu reflektieren)

Da Sie ROW_NUM Spalte haben, können Sie durch das sortieren:

CASE WHEN @cOrderBy = 'USER_FNM_USER_LNM ASC'  THEN ROW_NUM END ASC, 
CASE WHEN @cOrderBy = 'USER_FNM_USER_LNM DESC'  THEN ROW_NUM END DESC, 
CASE WHEN @cOrderBy IS NULL 
+0

Warum haben Sie den Teil gelöscht, der funktioniert? USER_LNM + USER_FNM – FrenkyB

+0

@FrenkyB Genau genommen funktioniert die Sortierung nicht korrekt mit USER_LNM + USER_FNM, außer wenn beide CHAR-Typen mit fester Länge sind. Daher ist schlechte Leistung nicht das Hauptanliegen. – Alex