Заказ SQL-запроса с исключениями - PullRequest
2 голосов
/ 30 марта 2012

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

т.е.

SELECT * FROM ProductsTable ORDER BY Manufacturer

Но сложность в том, что мы пытаемся продвигать одного конкретного производителя.Таким образом, все продукты этого производителя должны быть наверху, а не в алфавитном порядке с остальными.

e.g.

+---------+------------+
|Product  |Manufacturer|
+---------+------------+
|pears    |Jim         |
|apples   |Fred        |
|tomatoes |Adam        |
|oranges  |Bob         |
|bananas  |Fred        |
|grapes   |Carl        |
+---------+------------+

If we are promoting Fred, the query would result in

+---------+------------+
|Product  |Manufacturer|
+---------+------------+
|apples   |Fred        |
|bananas  |Fred        |
|tomatoes |Adam        |
|oranges  |Bob         |
|grapes   |Carl        |
|pears    |Jim         |
+---------+------------+

Есть ли способ сделать это?

Ответы [ 3 ]

6 голосов
/ 30 марта 2012

Попробуйте:

SELECT *, CASE WHEN Manufacturer = 'Fred' THEN 0 ELSE 1 END AS Ordering
FROM ProductsTable 
ORDER BY Ordering, Manufacturer
3 голосов
/ 30 марта 2012

Рядом с производителем укажите новое поле: Вес и укажите вес 1 для рекламирующего производителя, а 0 - для других, затем напишите свой запрос:

SELECT * FROM ProductsTable ORDER BY Weight, Manufacturer

для продвижения производителя Fred, используйте:

UPDATE ProductsTable SET Weight = 0;
UPDATE ProductsTable SET Weight = 1 WHERE Manufacturer='Fred';

(было бы хорошо заключить эти два update запроса в транзакцию)

0 голосов
/ 21 сентября 2015

Нечто подобное должно работать, основываясь на моем опыте работы с базой данных Microsoft Access, но я ожидаю, что работает и в некоторых других базах данных SQL ...

SELECT * FROM ProductsTable ORDER BY (Manufacturer='Fred'), Manufacturer;
...