2016-06-29 2 views
1

У меня есть таблица «продукт» с 3-мя столбцы:Различного порядок в зависимости от состояния

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

После того как я заказал продукты по приоритетному алфавиту, я хотел бы заказать два подмножества по цене. подмножество с приоритетом = 1 по возрастающей цене и с приоритетом = 0 по убыванию цены. Я пытался что-то вроде этого:

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

но ничего я пытался, казалось, не работать. Любая идея о том, как подойти к этому? TIA

ответ

2

Вам не хватает WHEN в вашем синтаксисе CASE. Это работает:

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

Simpler путь для запуска двух запросов, по одному для каждого приоритета, и объединить наборы результатов с помощью UNION:

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

Можно сделать это в одном запросе с помощью условных выражений , однако объединение является более быстрым и простым решением. – Shadow

+0

Спасибо за быстрый ответ! – Philip

+1

@ Shadow Да, вы правы. Кажется, что этого можно добиться и с помощью условных выражений и условных выражений. Я отредактирую свой ответ и добавлю его как альтернативный способ продемонстрировать правильный синтаксис, поскольку Филипп почти понял это в своем вопросе. – jussius

Смежные вопросы