2016-06-29 7 views
1

Ich habe ein ‚Produkt‘ Tabelle mit 3 Spalten:Unterschiedliche Reihenfolge der Bedingung abhängig

id (int) 
priority (1 or 0) 
price (int) 

Nachdem ich die Produkte nach Priorität ab bestellt haben, würde Ich mag die beiden Teilmengen nach Preis bestellen. die Teilmenge mit Priorität = 1 nach aufsteigendem Preis und jene mit Priorität = 0 nach absteigendem Preis. Ich habe versucht, Dinge wie diese:

SELECT * FROM product ORDER BY priority DESC, CASE priority = 1 THEN price END ASC, CASE priority = 0 THEN price END DESC 

aber nichts schien ich versucht zu arbeiten. Irgendeine Idee, wie man das angeht? TIA

Antwort

2

Sie vermissen WHEN in Ihrer CASE Syntax. Dies funktioniert:

SELECT * FROM product 
ORDER BY priority DESC, 
CASE WHEN priority = 1 THEN price END ASC, 
CASE WHEN priority = 0 THEN price END DESC; 

Einfachere Weg ist zwei Abfragen auszuführen, ein für jede Priorität und kombiniert die Ergebnismengen mit UNION:

SELECT * FROM product WHERE priority = 1 ORDER BY price ASC 
UNION ALL 
SELECT * FROM product WHERE priority = 0 ORDER BY price DESC 
+2

Es ist möglich, dies in einer einzigen Abfrage mit bedingten Ausdrücken zu tun Die Vereinigung ist jedoch eine schnellere und einfachere Lösung. – Shadow

+0

Danke für die schnelle Antwort! – Philip

+1

@Shadow Ja, du hast Recht. Es scheint so zu sein, dass dies auch mit Ordnungs- und Bedingungsausdrücken möglich ist. Ich bearbeite meine Antwort und füge sie als alternativen Weg hinzu, nur um die korrekte Syntax zu demonstrieren, da Philip es in seiner Frage fast richtig verstanden hat. – jussius