订购带有异常的SQL查询

时间:2012-03-30 13:03:14

标签: mysql sql-order-by

我有一个产品表,我需要编写一个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 个答案:

答案 0 :(得分:6)

尝试:

SELECT *, CASE WHEN Manufacturer = 'Fred' THEN 0 ELSE 1 END AS Ordering
FROM ProductsTable 
ORDER BY Ordering, Manufacturer

答案 1 :(得分:3)

在制造商旁边,输入一个新字段:重量,并将权重1提供给促销制造商,将0提​​供给其他人,然后写下您的查询:

SELECT * FROM ProductsTable ORDER BY Weight, Manufacturer

宣传制造商Fred,使用:

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

(最好将这两个update查询包装到事务中)

答案 2 :(得分:0)

这样的事情应该根据我对Microsoft Access数据库的经验而有效,但我希望在其他一些SQL数据库中也可以工作......

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