2016-04-15 3 views
2

Beispieltabelle:ORDER BY mit CASE - mehrere Spalten

tableId otherValue 
1  4 
2  3 
3  2 
4  1 

Ich bin die Daten in einer bestimmten Reihenfolge der Auswahl auf der Grundlage der tableId - wenn der Wert 1 oder 2 ist es dann zurück, andernfalls andere zurück. Jetzt möchte ich einen zusätzlichen Sortierparameter basierend auf otherValue hinzufügen.

einfach das Hinzufügen es nach CASE in ORDER BY wie unten dargestellt, wird nicht funktionieren, da WITH TIES verwendet wird.

SELECT TOP 1 WITH TIES tableId, otherValue 
FROM exampleTable 
ORDER BY (CASE WHEN tableId IN (1, 2) THEN 1 ELSE 2 END), otherValue 

Gibt es einen schöneren Weg als eine äußere Abfrage?

+0

Ich glaube nicht. Wenn Sie SQL 2012 und höher verwenden, können Sie IIF() verwenden. es ist ein bisschen sauberer. – FLICKER

+0

um 1 oder 2 bestellen? Das heißt, Sie bestellen bereits entweder mit tableId oder anderenValue –

Antwort

0

Wie wäre es mit so etwas?

select * from exampleTable 
where tableID in (1,2) or 
    not exists(select * from exampleTable where tableID in (1,2)) 
order by othervalue 
Verwandte Themen