2013-10-26 3 views
1

У меня есть имя столбца «Код» в моей базе данных и содержат разные номера, как это ..Как добавить различные условные операторы в SQL запросе

Product  |  Code 
=============================== 
    p1   |  0 
    p2   |  120 
    p3   |  0 
    p4   |  222 
    p5   |  1 
    p6   |  1 
    p7   |  180 
    p18  |  300 

Я хочу, чтобы отсортировать таблицу, заказ по кодексу. Сначала идут продукты с кодом «1», затем все номера в порядке ASC, а в конце отображаются продукты с кодом «0». Like This

Product  |  Code 
=============================== 
    p5   |  1 
    p6   |  1 
    p2   |  120 
    p7   |  180 
    p4   |  222 
    p18  |  300 
    p3   |  0 
    p1   |  0 

С помощью справки по SQL-запросу Спасибо?

+0

Это означает, что * возможно * вы должны использовать ['NULL'] (http://dev.mysql.com/doc/en/working-with-null.html) вместо 0? – eggyal

ответ

1

Первый сорт ли Code = 0 (в порядке возрастания, который по умолчанию, ложь/0 предшествует истинному/1); затем отсортировать по стоимости самого Code:

SELECT * FROM my_table ORDER BY Code = 0, Code 

Посмотри на sqlfiddle.

0

SELECT product,code FROM table ORDER BY CASE WHEN Code=0 THEN (SELECT max(Code)+1 FROM table) ELSE Code END ASC;

1

Вы можете сделать это с помощью трюка с UNION ALL:

SELECT Product,Code FROM (
    SELECT Product,Code,0 AS ORD FROM Table1 WHERE code != 0 
UNION ALL 
    SELECT Product,Code,1 FROM Table1 WHERE code=0 
) a 
ORDER BY ORD,CODE 

Это даст вам = 0 первый, упорядоченный по коду, а затем = 0!.

sqlfiddle demo

+0

@eggyal. Ты прав. Вместо того, чтобы удалять мой ответ, я написал способ упорядочить его правильным способом, используя почти тот же подход, но мне по-прежнему нравится ваш подход. –

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