2013-02-06 11 views
5

Mam problem z moją instrukcją SQL: Używam instrukcji SELECT, a następnie CASE, gdy używam kolejności według.T SQL case statement z porządkiem pierwotnym i wtórnym według parametru

SELECT ..... 
ORDER BY 
CASE WHEN @sort = 'ND' THEN name END DESC, 
CASE WHEN @sort = 'NA' THEN name END, 
CASE WHEN @sort = 'AD' THEN (isAuthorized) END DESC, 
CASE WHEN @sor = 'AA' THEN (isAuthorized) END 

isAuthorized jest wartością BIT, więc chciałbym użyć tam rzędu drugorzędnego.

Próbowałem coś takiego:

SELECT ..... 
ORDER BY 
CASE WHEN @sort = 'ND' THEN name END DESC, 
CASE WHEN @sort = 'NA' THEN name END, 
CASE WHEN @sort = 'AD' THEN (isAuthorized, name) END DESC, 
CASE WHEN @sort = 'AA' THEN (isAuthorized, name) END  

Ale to nie działa.

Używam serwera SQL 2008.

Każda pomoc będzie mile widziana.

Odpowiedz

7

Jeśli chcesz zamówić zestaw wyników najpierw name a następnie przez isAuthorized gdy @sort = ND stosowanie tej kwerendy:

SELECT ..... 
ORDER BY 
CASE WHEN @sort = 'ND' THEN name END DESC, 
CASE WHEN @sort = 'ND' THEN isAuthorized END 

Można łączyć CASE klauzul. Mam nadzieję, że wpadłeś na ten pomysł.

+1

Chciałem czegoś przeciwnego, najpierw przez autoryzowanego, a potem według nazwy (jak sortuję według wielu kolumn). Ale twoja odpowiedź wskazała mi właściwy kierunek, ponieważ nie wiedziałem, jak połączyć więcej niż jedno zamówienie za pomocą instrukcji. Dzięki za kilka ... ocenione i oznaczone jako odpowiedź;) – CyberHawk

+0

Cieszę się, że pomógł! –