2015-01-27 5 views
0

У меня есть данные для продуктов такого рода выглядит так:ORDER BY с несколькими условиями?

id order status discount status product type 
------------------------------------------------------ 
1  in progress  pending approval top 
2  in progress  approved   top 
3  NMI    pending approval jeans 
4  NMI    pending approval jacket 
5  completed  approved   helmet 

Существует определенный порядок, что продукты, которые обычно сортируются по, который похож на следующее:

ORDER BY "order status" DESC, "discount status" ASC, "product type" DESC, "id" DESC 

Теперь это нормально, но мне нужен особый тип порядка в верхней части списка, который представляет собой заказы, которые являются «статусом заказа» и «статус скидки» в ожидании утверждения. Остальная часть списка должна соответствовать порядку, описанному выше.

Я знаю, что могу использовать случаи, чтобы вытащить эту информацию в верхнюю часть, но как я могу это сделать, не нарушая остальной порядок? Благодаря!

+0

Какая база данных вы используете, db2 или mysql –

+0

Я использую db2 .. – wsc

ответ

3

При стандартном SQL, вы можете написать:

ORDER BY (CASE WHEN "order status" = 'in progress' AND "discount status" = 'pending approval' 
       THEN 1 ELSE 2 
      END), 
     "order status" DESC, 
     "discount status" ASC, 
     "product type" DESC, "id" DESC 

Это должно работать как в MySQL и DB2.

+0

Я использую DB2. Кажется, что я получаю код ошибки -214: «ВЫРАЖЕНИЕ В СЛЕДУЮЩЕМ ПОЛОЖЕНИИ ИЛИ ЗАПУСК С ПОЛОЖЕНИЕМ ИЛИ-ВЫЯВЛЕНИЕМ В СТРЕЛКЕ» Тип предложения CLAUSE NOT VALID. REASON CODE = код причины « – wsc

+0

@wes. , , Это странно. DB2 поддерживает оператор 'case', и в этом синтаксисе нет ничего странного. –

+0

Похоже, что позже по линии этому предшествует SELECT DISTINCT, который я считаю виновником. Это должно иметь какое-то отношение к двусмысленности. Любое решение? – wsc

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